MiRotatedToFrameBuffer
NTSTATUS __stdcall MiRotatedToFrameBuffer(_MMPTE *PointerPte){
INT64 v2;
unsigned __int64 v3;
_UNICODE_STRING *v4;
UINT8 v5;
wchar_t *v6;
__int64 v7;
_UNICODE_STRING *v8;
__int64 Buffer;
unsigned __int64 v10;
int v11;
NTSTATUS result;
INT64 v13;
LODWORD(v2) = MI_READ_PTE_LOCK_FREE((INT64)PointerPte);
v13 = v2;
result = 0;
if( (v2 & 1) != 0 )
{
LODWORD(v3) = MI_READ_PTE_LOCK_FREE((INT64)&v13);
v7 = (v3 >> 12) & 0xFFFFFFFFFi64;
v8 = (_UNICODE_STRING *)&MmGetPfnDb()[v7];
if( (((unsigned __int64)MmGetPfnDb()[v7].u4._bf_0 >> 50) & 1) == 0 )
return 1;
Buffer = (__int64)v8->Buffer;
if( (_MMPTE *)(Buffer | 0x8000000000000000ui64) != PointerPte
|| (LODWORD(v10) = MI_READ_PTE_LOCK_FREE((INT64)MmGetPteBase() + (((unsigned __int64)PointerPte >> 9) & 0x7FFFFFFFF8i64)),
(((unsigned __int64)v8[2].Buffer ^ (v10 >> 12)) & 0xFFFFFFFFFi64) != 0) )
{
LOBYTE(v11) = MI_PFN_IS_PROTO(v8, v4, v5, v6);
if( !v11 || ((__int64)v8[2].Buffer & 0x1000000000i64) != 0 || Buffer <= 0 )
return 1;
}
}
return result;
}Referenced by:
MiActOnPte
MiCheckCommitReleaseFromVad
MiDeleteVa
MiGetPageProtection
MiGetWorkingSetInfoList
MiMakeVaRangeNoAccess
MiProtectPrivateMemory
MiRevertValidPte
NtUnlockVirtualMemory