MiBuildDynamicRegion
NTSTATUS __stdcall MiBuildDynamicRegion(_RTL_BITMAP *BitMap, VOID *BaseVa, UINT64 NumberOfBytes){
UINT64 v4;
UINT64 v5;
_MMPTE *PteBase;
UINT64 v7;
UINT64 v8;
_MMPTE *v9;
_MMPTE *v10;
UINT64 v11;
unsigned int *Buffer;
if( BitMap == (_RTL_BITMAP *)((char *)&stru_140C4DB30 + 968) )
*(&stru_140C4DB30 + 75) = NumberOfBytes;
*(_QWORD *)&BitMap[4].SizeOfBitMap = 0i64;
*(_QWORD *)&BitMap[2].SizeOfBitMap = BaseVa;
v4 = NumberOfBytes >> 21;
v5 = ExGenRandom(ExGenRandomDomainUserVisible) & 0x7FFF;
BitMap[1].Buffer = (unsigned int *)v5;
if( BitMap == (_RTL_BITMAP *)((char *)&stru_140C4DB30 + 680) )
BitMap[1].Buffer = (unsigned int *)(v5 & 0xFFF);
*(_QWORD *)&BitMap[1].SizeOfBitMap = v4;
PteBase = MmGetPteBase();
v7 = 1i64;
if( BitMap == (_RTL_BITMAP *)((char *)&stru_140C4DB30 + 680) && (Buffer = BitMap->Buffer) != 0i64 )
{
v10 = (_MMPTE *)((char *)PteBase + (((unsigned __int64)Buffer >> 9) & 0x7FFFFFFFF8i64));
}
else
{
v8 = 8 * ((v4 >> 6) + ((v4 & 0x3F) != 0));
v9 = MiReservePtes(
(_MI_SYSTEM_PTE_TYPE *)((char *)&stru_140C4DB30 + 4432),
(unsigned int)(v8 >> 12) + ((v8 & 0xFFF) != 0));
v10 = v9;
if( !v9 )
return(int)v9;
v7 = 3i64;
}
MiInitializeDynamicBitmap(
(_RTL_BITMAP_EX *)BitMap,
(VOID *)((__int64)(((_QWORD)v10 << 25) - ((_QWORD)PteBase << 25)) >> 16),
v4,
v7);
*(_QWORD *)&BitMap->SizeOfBitMap = 0i64;
v11 = ExGenRandom(ExGenRandomDomainUserVisible) & 0x7FFF;
BitMap[1].Buffer = (unsigned int *)v11;
if( BitMap == (_RTL_BITMAP *)((char *)&stru_140C4DB30 + 680) )
BitMap[1].Buffer = (unsigned int *)(v11 & 0xFFF);
LODWORD(v9) = 1;
return(int)v9;
}Referenced by:
MiBuildPagedPool
MiInitializeDriverImages
MiInitializeDynamicRegion
MiInitializeKernelStacks
MiInitializeNonPagedPool
MiInitializeSystemPtes