ExInitializePoolHeapManagement

INT64 __fastcall ExInitializePoolHeapManagement(UINT64 a1){
  unsigned int v1; 
  INT64 result; 
  unsigned int v3; 
  __int128 v4; 
  __int64 v5; 
  __int64 *v6; 
  __int128 v7; 
  UINT64 v8; 
  UINT64 v9; 
  UINT64 v10; 
  bool v11; 
  UINT64 v12; 
  __int64 v13; 
  UINT64 v14; 
  UINT64 v15; 
  __int128 v16; 
  UINT64 *v17; 
  __int128 v18; 
  __int128 a1a; 
  __int128 v20; 
  __int128 v21; 
  __int128 v22; 
  INT64 v23[2]; 
  __int64 v24; 
  UINT64 a3; 
  v1 = a1;
  a3 = 0i64;
  v24 = 0i64;
  *(_OWORD *)v23 = 0i64;
  result = RtlHpKInitializeHeapManager();
  if( (int)result >= 0 )
  {
    RtlpHpLfhPerfFlags = 1279;
    ExpDetermineLargePagePolicy((INT64)v23);
    v3 = 0;
    if( dword_140C57DD0 )
    {
      v4 = *(_OWORD *)v23;
      while( 1 )
      {
        v5 = 0i64;
        v16 = 0i64;
        LOWORD(v16) = 259;
        v6 = &qword_140C57E00[1048 * v3];
        BYTE2(v16) = v3;
        v7 = v16;
        a1a = v16;
        if( v23[1] )
          v5 = 0x4000000i64;
        result = ExCreateHeap(&a1a, v5, &a3);
        if( (int)result < 0 )
          break;
        v11 = v23[1] == 0;
        v12 = a3;
        v6[1] = a3;
        if( !v11 )
        {
          v13 = v24;
          *(_OWORD *)(v12 + 192) = v4;
          *(_QWORD *)(v12 + 208) = v13;
          *(_BYTE *)(v12 + 269) = *(_BYTE *)(v12 + 269) & 0xF8 | 1;
          *(_BYTE *)(v12 + 461) = *(_BYTE *)(v12 + 461) & 0xF8 | 1;
        }
        RtlpDynamicLookasideInitialize((_HHIVE *)(v6 + 528), v8, v9, v10, 3u, *((_RTL_BITMAP **)&v16 + 1), v17);
        *(_QWORD *)(v12 + 40) = v6 + 528;
        v20 = v7;
        result = ExCreateHeap(&v20, 0x40000000i64, &a3);
        if( (int)result < 0 )
          break;
        ++v3;
        *v6 = a3;
        if( v3 >= dword_140C57DD0 )
          goto LABEL_11;
      }
    }
    else
    {
LABEL_11:
      v18 = 0i64;
      *(_WORD *)((char *)&v18 + 1) = 1;
      LOBYTE(v18) = 3;
      v21 = v18;
      result = ExCreateHeap(&v21, 0i64, &a3);
      if( (int)result >= 0 )
      {
        v14 = a3;
        v22 = v18;
        *(_DWORD *)(a3 + 816) |= 2u;
        *(_BYTE *)(v14 + 269) |= 8u;
        *(_BYTE *)(v14 + 461) |= 8u;
        qword_140CDAE08 = v14;
        result = ExCreateHeap(&v22, 0x40000000i64, &a3);
        if( (int)result >= 0 )
        {
          v15 = a3;
          *(_DWORD *)(a3 + 816) |= 2u;
          *(_BYTE *)(v15 + 269) |= 8u;
          *(_BYTE *)(v15 + 461) |= 8u;
          qword_140CDAE00[0] = v15;
          result = ExInitializePoolTracker();
          if( (int)result >= 0 )
            _InterlockedOr(&ExpPoolFlags, v1);
        }
      }
    }
  }
  return result;
}

Referenced by:

MiInitNucleus