MiFreeBootPageTable
VOID __stdcall MiFreeBootPageTable(UINT64 PageFrameIndex){
_MMPFN *v1;
unsigned __int16 ReferenceCount;
unsigned __int64 v3;
char v4;
v1 = &MmGetPfnDb()[PageFrameIndex];
ReferenceCount = v1->u3.ReferenceCount;
if( ReferenceCount )
{
if( ReferenceCount != 2 || (v1->u2._bf_0 & 0x3FFFFFFFFFFFFFFFi64) != 1 )
KeBugCheckEx(0x1Au, (PVOID)0x3030307, (PVOID)PageFrameIndex, 0i64, 0i64);
v3 = MiLockPageInline(v1);
v4 = *(_BYTE *)(&v1->u3 + 1) & 0xFD;
v1->u3.ReferenceCount = 0;
v1->u2._bf_0 &= 0xC000000000000000ui64;
*((_BYTE *)&v1->u3 + 2) = v4 | 5;
_InterlockedAnd64(&v1->u2.Lock, 0x7FFFFFFFFFFFFFFFui64);
__writecr8(v3);
}
else
{
v1->PteLong = 0i64;
v1->u4._bf_0 |= 0x4000000000000ui64;
}
MiLockAndInsertPageInFreeList(v1);
}Referenced by:
MxZeroBootMappings