MiCheckVirtualAddress
_MMPTE *__stdcall MiCheckVirtualAddress(VOID *VirtualAddress, UINT64 *ProtectCode, _MMVAD **VadOut){
UINT64 *v4;
unsigned __int64 v5;
_MMVAD *Address;
UINT64 v7;
VOID *v8;
_MMPTE *result;
*VadOut = 0i64;
v4 = ProtectCode;
if( (unsigned __int64)VirtualAddress <= 0x7FFFFFFEFFFFi64 )
{
if( (KeGetCurrentThread()->ApcState.Process->Flags3 & 1) == 0 )
{
v5 = (unsigned __int64)VirtualAddress & 0x7FFFFFFFF000i64;
if( ((unsigned __int64)VirtualAddress & 0xFFFFFFFFFFFFF000ui64) == 2147352576 )
{
result = (_MMPTE *)*(&stru_140C4DB30 + 9);
LABEL_10:
*(_DWORD *)ProtectCode = 1;
return result;
}
if( v5 == *(&stru_140C4DB30 + 11) && v5 )
{
result = (_MMPTE *)*(&stru_140C4DB30 + 10);
goto LABEL_10;
}
}
Address = MiLocateAddress(VirtualAddress);
*VadOut = Address;
if( Address )
return MiCheckUserVirtualAddress(v8, v4, Address, v7);
goto LABEL_14;
}
if( VirtualAddress < MmGetPteBase() || VirtualAddress > MmGetPteLimit() )
{
LABEL_14:
*(_DWORD *)v4 = 24;
return 0i64;
}
*(_DWORD *)ProtectCode = 4;
return 0i64;
}Referenced by:
MiCheckProtoAccess
MiFindActualFaultingPte
MiIsFaultPteIntact
MiResolveDemandZeroFault
MiSystemFault
MiTranslatePageForCopy