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