MiBuildDynamicRegion
NTSTATUS __stdcall MiBuildDynamicRegion(RTL_BITMAP *BitMap, PVOID BaseVa, UINT64 a3){
UINT64 v4;
INT64 v5;
_MMPTE *PteBase;
UINT64 v7;
UINT64 v8;
INT64 v9;
INT64 v10;
INT64 v11;
unsigned int *Buffer;
if( BitMap == (RTL_BITMAP *)&qword_140C4DEF8 )
qword_140C4DD88 = a3;
*(_QWORD *)&BitMap[4].SizeOfBitMap = 0i64;
*(_QWORD *)&BitMap[2].SizeOfBitMap = BaseVa;
v4 = a3 >> 21;
v5 = ExGenRandom(1i64) & 0x7FFF;
BitMap[1].Buffer = (unsigned int *)v5;
if( BitMap == (RTL_BITMAP *)&qword_140C4DDD8 )
BitMap[1].Buffer = (unsigned int *)(v5 & 0xFFF);
*(_QWORD *)&BitMap[1].SizeOfBitMap = v4;
PteBase = MmGetPteBase();
v7 = 1i64;
if( BitMap == (RTL_BITMAP *)&qword_140C4DDD8 && (Buffer = BitMap->Buffer) != 0i64 )
{
v10 = (INT64)PteBase + (((unsigned __int64)Buffer >> 9) & 0x7FFFFFFFF8i64);
}
else
{
v8 = 8 * ((v4 >> 6) + ((v4 & 0x3F) != 0));
v9 = MiReservePtes((INT64)&qword_140C4EC80, (unsigned int)(v8 >> 12) + ((v8 & 0xFFF) != 0));
v10 = v9;
if( !v9 )
return v9;
v7 = 3i64;
}
MiInitializeDynamicBitmap(BitMap, (PVOID)(((v10 << 25) - ((_QWORD)PteBase << 25)) >> 16), v4, v7);
*(_QWORD *)&BitMap->SizeOfBitMap = 0i64;
v11 = ExGenRandom(1i64) & 0x7FFF;
BitMap[1].Buffer = (unsigned int *)v11;
if( BitMap == (RTL_BITMAP *)&qword_140C4DDD8 )
BitMap[1].Buffer = (unsigned int *)(v11 & 0xFFF);
LODWORD(v9) = 1;
return v9;
}Referenced by:
MiBuildPagedPool
MiInitializeDriverImages
MiInitializeDynamicRegion
MiInitializeKernelStacks
MiInitializeNonPagedPool
MiInitializeSystemPtes