MiInitializeSystemPtes
NTSTATUS __stdcall MiInitializeSystemPtes(){
VOID *v0;
char *PagesPerBit;
_MMSUPPORT_INSTANCE *AnyMultiplexedVm;
VOID *v3;
_MMSUPPORT_INSTANCE *v4;
unsigned int v5;
char *v6;
int v7;
_RTL_BITMAP *v8;
PagesPerBit = (char *)*(&stru_140C4DB30 + 929);
AnyMultiplexedVm = MiGetAnyMultiplexedVm(MiWorkingSetTypeSystemPtes, v0);
if( !MiInitializeSystemWorkingSetList(
(ULONG_PTR *)&Irp.Core.PartitionId,
AnyMultiplexedVm,
WorkingSetTypeSystemPtes,
0i64) )
return 0;
v4 = MiGetAnyMultiplexedVm(MiWorkingSetTypeKernelStacks, v3);
if( !MiInitializeSystemWorkingSetList((ULONG_PTR *)&Irp.Core.PartitionId, v4, WorkingSetTypeKernelStacks, 0i64) )
return 0;
KeGetCurrentPrcb()->PteBitCache = -1i64;
v5 = ((dword_140CFA17C & 2) << 8) | 0x101;
v6 = &PagesPerBit[0x200000 * (0x800000 - (v5 + (ExGenRandom(ExGenRandomDomainUserVisible) & 0x3FFF)))];
*(&stru_140C4DB30 + 86) = v6;
MiInitializePteInfo(
(_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432),
(VOID *)9,
(UINT64)(v6 + 0x100000),
9ui64,
(UINT64)PagesPerBit);
if( !v7 )
return 0;
*(&stru_140C4DB30 + 1114) |= 1u;
*(&stru_140C4DB30 + 564) = *(&stru_140C4DB30 + 415);
AnyMultiplexedVm->Flags._bf_0 = AnyMultiplexedVm->Flags._bf_0 & 0xF8 | 5;
if( (dword_140CFA17C & 2) != 0
&& MiInitializeDynamicBitmap(
(_RTL_BITMAP_EX *)((char *)&stru_140C4DB30 + 3304),
v6 + 537919488,
0x200000000ui64,
9ui64) != 1 )
{
dword_140CFA17C &= ~2u;
}
v8 = (_RTL_BITMAP *)MiSystemVaToDynamicBitmap(9i64);
if( MiBuildDynamicRegion(v8, PagesPerBit, 0x100000000000ui64)
&& (MiObtainSystemVa(v5, MiVaSystemPtesLarge),
MiFlags |= 0x20000000u,
*(&stru_140C4DB30 + 443) = 0i64,
(*(&stru_140C4DB30 + 447) = MiReservePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), 1ui64)) != 0i64) )
{
return 1;
}
else
{
return 0;
}
}Referenced by:
MiInitNucleus