HvpGetHiveHeader

__int64 __fastcall HvpGetHiveHeader(__int64 a1, char **a2, _QWORD *a3){
  char **v4; 
  INT64 v6; 
  INT64 v7; 
  int v8; 
  unsigned int v9; 
  unsigned int v10; 
  unsigned int v11; 
  int v12; 
  int v14; 
  *a2 = 0i64;
  v4 = a2;
  LOBYTE(a2) = 1;
  v6 = (*(__int64(__fastcall **)(_QWORD, char **, __int64))(a1 + 24))(*(unsigned int *)(a1 + 132), a2, 842222915i64);
  v7 = v6;
  if( v6 )
  {
    memset(v6, 0i64);
    if( (*(int(__fastcall **)(__int64, _QWORD, _QWORD, INT64, _DWORD))(a1 + 48))(
           a1,
           0i64,
           0i64,
           v7,
           *(_DWORD *)(a1 + 136) << 9) >= 0 )
    {
      if( *(_DWORD *)v7 == 1718052210 && *(_DWORD *)(v7 + 508) == (unsigned int)HvpHeaderCheckSum((_DWORD *)v7) )
      {
        v8 = *(_DWORD *)(v7 + 40);
        if( (unsigned int)(v8 - 1) <= 0x7FFFDFFF && (v8 & 0xFFF) == 0 )
        {
          if( !*(_DWORD *)(v7 + 28) )
          {
            v9 = *(_DWORD *)(v7 + 20);
            if( v9 <= 1 )
            {
              v10 = *(_DWORD *)(v7 + 24);
              v11 = 3;
              if( v10 >= 3 && (v10 <= 6 || v9 != 1) && *(_DWORD *)(v7 + 32) == 1 )
              {
                *a3 = *(_QWORD *)(v7 + 12);
                v12 = *(_DWORD *)(v7 + 8);
                *v4 = (char *)v7;
                if( *(_DWORD *)(v7 + 4) == v12 )
                  *(_DWORD *)(v7 + 44) = 1;
                else
                  return 5;
                return v11;
              }
            }
          }
          goto LABEL_16;
        }
      }
      v14 = (*(__int64(__fastcall **)(__int64, _QWORD, __int64, INT64, _DWORD))(a1 + 48))(
              a1,
              0i64,
              4096i64,
              v7,
              *(_DWORD *)(a1 + 136) << 9);
      if( v14 == -1073741807 )
      {
LABEL_16:
        v11 = 0;
LABEL_26:
        (*(void(__fastcall **)(INT64, _QWORD))(a1 + 32))(v7, *(unsigned int *)(a1 + 132));
        return v11;
      }
      if( v14 >= 0 )
      {
        if( *(_DWORD *)v7 == 1852400232 && !*(_DWORD *)(v7 + 4) )
        {
          v11 = 4;
          *a3 = *(_QWORD *)(v7 + 20);
          goto LABEL_26;
        }
        goto LABEL_16;
      }
    }
    v11 = 7;
    goto LABEL_26;
  }
  return 2i64;
}

Referenced by:

No references.