MiInitializePteInfo
VOID __stdcall MiInitializePteInfo(
_MI_SYSTEM_PTE_TYPE *PteInfo,
VOID *BaseVa,
UINT64 NumberOfBytes,
UINT64 a4,
UINT64 PagesPerBit){
unsigned __int64 v5;
_MMPTE *v6;
unsigned __int64 v7;
unsigned int v8;
UINT64 v9;
_MI_SYSTEM_VA_TYPE v10;
_MMPTE *v12;
_KTBFLUSH_TYPE v13;
unsigned int Flags;
unsigned __int64 v15;
unsigned int v16;
LODWORD(v5) = 0;
v6 = 0i64;
v7 = v15 >> 12;
v8 = a4;
v9 = NumberOfBytes;
v10 = (int)BaseVa;
if( !NumberOfBytes )
{
v5 = ((((v7 + v16 - 1i64) / v16 + 7) >> 3) + 4095) >> 12;
v12 = MiReservePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), (unsigned int)v5);
v6 = v12;
if( !v12 )
return;
v9 = (__int64)(((_QWORD)v12 << 25) - ((_QWORD)MmGetPteBase() << 25)) >> 16;
}
if( MiInitializeDynamicBitmap(&PteInfo->Bitmap, (VOID *)v9, v7 / v16, v8) )
{
PteInfo->Flags = 2;
Flags = PteInfo->Flags;
if( v16 == 16 )
Flags = 6;
PteInfo->VaType = v10;
PteInfo->Flags = Flags;
PteInfo->FailureCount = &PteInfo->PteFailures;
PteInfo->LowestBitEverAllocated = 0i64;
PteInfo->Bitmap.SizeOfBitMap = 0i64;
PteInfo->SpinLock = 0i64;
PteInfo->BasePte = (_MMPTE *)((char *)MmGetPteBase() + ((PagesPerBit >> 9) & 0x7FFFFFFFF8i64));
}
else if( v6 )
{
MiReleasePtes((_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432), v6, (unsigned int)v5, v13);
}
}Referenced by:
MiInitializeKernelStacks
MiInitializeSystemPtes
MiInitializeSystemSpaceMap