MiFreeBootPageTable
VOID __stdcall MiFreeBootPageTable(UINT64 PageFrameIndex){
char *v1;
__int16 v2;
unsigned __int64 v3;
char v4;
v1 = (char *)MmGetPfnDb() + 48 * PageFrameIndex;
v2 = *((_WORD *)v1 + 16);
if( v2 )
{
if( v2 != 2 || (*((_QWORD *)v1 + 3) & 0x3FFFFFFFFFFFFFFFi64) != 1 )
KeBugCheckEx(0x1Au, 0x3030307ui64, PageFrameIndex, 0i64, 0i64);
v3 = (unsigned __int8)MiLockPageInline((INT64)v1);
v4 = v1[34] & 0xFD;
*((_WORD *)v1 + 16) = 0;
*((_QWORD *)v1 + 3) &= 0xC000000000000000ui64;
v1[34] = v4 | 5;
_InterlockedAnd64((volatile signed __int64 *)v1 + 3, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v3);
}
else
{
*((_QWORD *)v1 + 1) = 0i64;
*((_QWORD *)v1 + 5) |= 0x4000000000000ui64;
}
MiLockAndInsertPageInFreeList((_MMPFN *)v1);
}Referenced by:
MxZeroBootMappings