MiInitializeNonPagedPool
NTSTATUS __stdcall MiInitializeNonPagedPool(){
VOID *v0;
_MMSUPPORT_INSTANCE *AnyMultiplexedVm;
struct _KPRCB *CurrentPrcb;
unsigned __int64 v3;
unsigned __int64 v4;
unsigned int v5;
__int64 v6;
unsigned __int64 v7;
unsigned int v8;
__int64 v9;
unsigned __int64 v10;
unsigned __int64 v11;
unsigned __int64 v12;
UINT64 v13;
__int64 v14;
__int64 v15;
char *v16;
_RTL_BITMAP *v17;
VOID *v18;
UINT8 v19;
INT64 v20;
unsigned __int64 v21;
__int64 v22;
_MMPFN *v23;
INT64 v25;
AnyMultiplexedVm = MiGetAnyMultiplexedVm(MiWorkingSetTypeNonPagedPool, v0);
if( !MiInitializeSystemWorkingSetList(
(ULONG_PTR *)&Irp.Core.PartitionId,
AnyMultiplexedVm,
WorkingSetTypeNonPagedPool,
0i64) )
return 0;
CurrentPrcb = KeGetCurrentPrcb();
v3 = CurrentPrcb->KeSystemCalls ^ CurrentPrcb->InterruptTime ^ KUSER_SHARED_DATA.SystemTime.High1Time ^ __rdtsc() ^ ((unsigned __int64)KUSER_SHARED_DATA.SystemTime.LowPart << 32);
v4 = (unsigned __int64)(unsigned int)ExGenRandom(ExGenRandomDomainKernel) << 32;
v5 = ExGenRandom(ExGenRandomDomainKernel);
v6 = *(&stru_140C4DB30 + 923);
v7 = v4 | v5;
v8 = 0;
v9 = v7 ^ v3;
if( !v9 )
v9 = 1i64;
*(&stru_140C4DB30 + 539) = v9;
v10 = (unsigned __int64)MmPfnDatabase + 4096 * MxPfnAllocation;
v11 = ((_DWORD)MmPfnDatabase + ((_DWORD)MxPfnAllocation << 12)) & 0x1FFFFF;
*(&stru_140C4DB30 + 552) = 0x100000000i64;
v12 = (0x200000 - v11) & -(__int64)(v11 != 0);
v13 = (0x800000ui64 / (unsigned __int16)KeNumberNodes) << 21;
if( KeNumberNodes )
{
do
{
v14 = *(&stru_140C4DB30 + 22);
v15 = 176i64 * v8;
v16 = (char *)(v13 * v8 + v6);
*(_QWORD *)(v15 + *(&stru_140C4DB30 + 22) + 160) = v16;
*(_QWORD *)(v15 + v14 + 168) = &v16[v13];
if( !MiBuildDynamicRegion((_RTL_BITMAP *)(v15 + *(&stru_140C4DB30 + 22) + 64i64), v16, v13) )
return 0;
}
while( ++v8 < (unsigned __int16)KeNumberNodes );
}
v17 = (_RTL_BITMAP *)MiSystemVaToDynamicBitmap(15i64);
if( !MiBuildDynamicRegion(v17, v18, 0x8000000000ui64) )
return 0;
if( v12 )
{
LODWORD(v20) = MI_READ_PTE_LOCK_FREE((INT64)MmGetPdeBase() + ((v10 >> 18) & 0x3FFFFFF8));
v25 = v20;
if( (v20 & 0x80u) != 0i64 )
{
LODWORD(v21) = MI_READ_PTE_LOCK_FREE((INT64)&v25);
v22 = (v21 >> 12) & 0xFFFFFFFFFi64;
v23 = &MmGetPfnDb()[v22];
if( (v23->u4._bf_0 & 0x1000000000i64) != 0 )
MiConvertEntireLargePageToSmall((_KQUEUE *)v23, 1, 0, (_LARGE_INTEGER *)6, 0i64, 0i64);
MiAddExpansionNonPagedPool(v22 + (v11 >> 12), v12 >> 12);
}
}
MiInitializeNonPagedPoolThresholds(v19);
return 1;
}Referenced by:
MiInitNucleus