HvpInitMap

INT64 __fastcall HvpInitMap(INT64 a1, INT64 a2){
  unsigned int v2; 
  INT64 v3; 
  INT64 v4; 
  INT64 v5; 
  unsigned int v7; 
  unsigned int v8; 
  unsigned int v9; 
  __int64 v10; 
  unsigned int v11; 
  __int64(__fastcall *v12)(__int64, _QWORD, __int64); 
  INT64 v13; 
  INT64 v14; 
  INT64 v15; 
  INT64 result; 
  INT64 v17; 
  unsigned int v18; 
  INT64 v19; 
  INT64 v20; 
  INT64 v21; 
  v2 = 0;
  v3 = *(_QWORD *)(a1 + 56);
  v4 = 0i64;
  v5 = 0i64;
  v7 = *(_DWORD *)(*(_QWORD *)(a1 + 64) + 40i64);
  if( (v7 & 0xFFF) != 0 )
  {
    LODWORD(v21) = 0;
    v18 = -1073741492;
    v19 = 3221225804i64;
  }
  else
  {
    v8 = v7 >> 12;
    if( v7 >> 12 )
      v9 = (v8 - 1) >> 9;
    else
      v9 = 0;
    *(_DWORD *)(a1 + 272) = v7;
    if( *(_QWORD *)(a1 + 96) )
      goto LABEL_10;
    v2 = (v8 + 3) & 0xFFFFFFFC;
    LOBYTE(a2) = 1;
    if( !v2 )
      v2 = 4;
    v4 = (*(__int64(__fastcall **)(_QWORD, INT64, __int64))(a1 + 24))(v2, a2, 926043459i64);
    if( v4 )
    {
      LOBYTE(v10) = 1;
      v5 = (*(__int64(__fastcall **)(_QWORD, __int64, __int64))(a1 + 24))(v2, v10, 926043459i64);
      if( !v5 )
      {
        v20 = 3221225495i64;
        goto LABEL_23;
      }
      memset(v4, 0i64);
      memset(v5, 0i64);
      *(_QWORD *)(a1 + 96) = v4;
      v11 = v7 >> 9;
      *(_DWORD *)(a1 + 88) = v11;
      *(_DWORD *)(a1 + 112) = v11;
      *(_QWORD *)(a1 + 120) = v5;
      *(_DWORD *)(a1 + 108) = v2;
LABEL_10:
      v12 = *(__int64(__fastcall **)(__int64, _QWORD, __int64))(a1 + 24);
      if( v9 )
      {
        v17 = v12(0x2000i64, 0i64, 942820675i64);
        v15 = v17;
        if( v17 )
        {
          memset(v17, 0i64);
          if( HvpAllocateMap(a1, v15, 0i64, v9) )
          {
            v14 = 0i64;
            goto LABEL_13;
          }
          LODWORD(v21) = 64;
          v18 = -1073741670;
          SetFailureLocation(v3, 0i64, 5i64, 3221225626i64, v21);
          HvpFreeMap(a1, v15, 0i64, v9);
          (*(void(__fastcall **)(INT64, __int64))(a1 + 32))(v15, 0x2000i64);
          goto LABEL_27;
        }
        v20 = 3221225626i64;
        LODWORD(v21) = 48;
LABEL_25:
        v18 = v20;
        SetFailureLocation(v3, 0i64, 5i64, v20, v21);
LABEL_27:
        if( v4 )
        {
          if( *(_QWORD *)(a1 + 96) == v4 )
            *(_QWORD *)(a1 + 96) = 0i64;
          (*(void(__fastcall **)(INT64, _QWORD))(a1 + 32))(v4, v2);
        }
        if( v5 )
        {
          if( *(_QWORD *)(a1 + 120) == v5 )
            *(_QWORD *)(a1 + 120) = 0i64;
          (*(void(__fastcall **)(INT64, _QWORD))(a1 + 32))(v5, v2);
        }
        return v18;
      }
      v13 = v12(12288i64, 0i64, 909266243i64);
      v14 = v13;
      if( v13 )
      {
        memset(v13, 0i64);
        v15 = a1 + 288;
LABEL_13:
        *(_QWORD *)(a1 + 280) = v15;
        result = 0i64;
        *(_QWORD *)(a1 + 288) = v14;
        return result;
      }
      v20 = 3221225626i64;
LABEL_23:
      LODWORD(v21) = 32;
      goto LABEL_25;
    }
    v19 = 3221225495i64;
    LODWORD(v21) = 16;
    v18 = -1073741801;
  }
  SetFailureLocation(v3, 0i64, 5i64, v19, v21);
  return v18;
}

Referenced by:

HvpBuildMapForMemoryBackedHive