MiInitializeNonPagedPool
UINT64 __fastcall MiInitializeNonPagedPool(){
CHAR *AnyMultiplexedVm;
struct _KPRCB *CurrentPrcb;
unsigned __int64 v2;
unsigned __int64 v3;
unsigned int v4;
__int64 v5;
unsigned __int64 v6;
unsigned int v7;
__int64 v8;
unsigned __int64 v9;
unsigned __int64 v10;
unsigned __int64 v11;
UINT64 v12;
PSLIST_HEADER v13;
__int64 v14;
char *v15;
INT64 *v16;
PVOID v17;
UINT8 v18;
unsigned __int64 v19;
KQUEUE *v20;
INT64 v22;
AnyMultiplexedVm = MiGetAnyMultiplexedVm(5i64);
if( !(unsigned int)MiInitializeSystemWorkingSetList(&MiSystemPartition, (INT64)AnyMultiplexedVm, 7i64, 0i64) )
return 0i64;
CurrentPrcb = KeGetCurrentPrcb();
v2 = *((unsigned int *)CurrentPrcb + 2894) ^ *((unsigned int *)CurrentPrcb + 8100) ^ KUSER_SHARED_DATA.SystemTime.High1Time ^ __rdtsc() ^ ((unsigned __int64)KUSER_SHARED_DATA.SystemTime.LowPart << 32);
v3 = (unsigned __int64)(unsigned int)ExGenRandom(0i64) << 32;
v4 = ExGenRandom(0i64);
v5 = qword_140C4F808[0];
v6 = v3 | v4;
v7 = 0;
v8 = v6 ^ v2;
if( !v8 )
v8 = 1i64;
qword_140C4EC08 = v8;
v9 = MmPfnDatabase + (MxPfnAllocation << 12);
v10 = ((_DWORD)MmPfnDatabase + ((_DWORD)MxPfnAllocation << 12)) & 0x1FFFFF;
qword_140C4EC70 = 0x100000000i64;
v11 = (0x200000 - v10) & -(__int64)(v10 != 0);
v12 = (0x800000ui64 / (unsigned __int16)KeNumberNodes) << 21;
if( KeNumberNodes )
{
do
{
v13 = SListHead;
v14 = 176i64 * v7;
v15 = (char *)(v12 * v7 + v5);
*(_QWORD *)((char *)SListHead + v14 + 160) = v15;
*(_QWORD *)((char *)v13 + v14 + 168) = &v15[v12];
if( !MiBuildDynamicRegion((RTL_BITMAP *)((char *)SListHead + v14 + 64), v15, v12) )
return 0i64;
}
while( ++v7 < (unsigned __int16)KeNumberNodes );
}
v16 = MiSystemVaToDynamicBitmap(15i64);
if( !MiBuildDynamicRegion((RTL_BITMAP *)v16, v17, 0x8000000000ui64) )
return 0i64;
if( v11 )
{
v22 = MI_READ_PTE_LOCK_FREE((INT64)MmGetPdeBase() + ((v9 >> 18) & 0x3FFFFFF8));
if( (v22 & 0x80u) != 0i64 )
{
v19 = ((unsigned __int64)MI_READ_PTE_LOCK_FREE((INT64)&v22) >> 12) & 0xFFFFFFFFFi64;
v20 = (KQUEUE *)((char *)MmGetPfnDb() + 48 * v19);
if( (*(_QWORD *)&v20->CurrentCount & 0x1000000000i64) != 0 )
MiConvertEntireLargePageToSmall(v20, 1, 0, (LARGE_INTEGER *)6, 0i64, 0i64);
MiAddExpansionNonPagedPool(v19 + (v10 >> 12), v11 >> 12);
}
}
MiInitializeNonPagedPoolThresholds(v18);
return 1i64;
}Referenced by:
MiInitNucleus