MmIsAddressValidEx
BOOL __fastcall MmIsAddressValidEx(INT64 a1){
_MMPTE *PteLimit;
_MMPTE *PteBase;
_MMPTE *Pml4eBase;
__int64 v5;
unsigned int PxeUserLimit;
_MMPTE *v7;
__int64 v8;
__int64 v10;
unsigned __int64 v11;
unsigned __int64 v12;
unsigned __int64 v13;
__int64 v14;
PteLimit = (_MMPTE *)((a1 >> 47) + 1);
if( a1 >> 47 == -1 || PteLimit == (_MMPTE *)1 )
{
PteBase = MmGetPteBase();
v11 = (unsigned __int64)PteBase + (((unsigned __int64)a1 >> 9) & 0x7FFFFFFFF8i64);
v12 = (unsigned __int64)PteBase + ((v11 >> 9) & 0x7FFFFFFFF8i64);
v13 = (unsigned __int64)PteBase + ((v12 >> 9) & 0x7FFFFFFFF8i64);
Pml4eBase = MmGetPml4eBase();
v14 = (__int64)PteBase + ((v13 >> 9) & 0x7FFFFFFFF8i64);
v5 = 4i64;
PxeUserLimit = (unsigned int)MmGetPxeUserLimit();
while( 1 )
{
v7 = (_MMPTE *)*(&v10 + v5--);
v8 = *(_QWORD *)v7;
LODWORD(PteLimit) = (_DWORD)Pml4eBase;
if( v7 >= Pml4eBase )
LODWORD(PteLimit) = PxeUserLimit;
if( (v8 & 1) == 0 )
break;
if( (v8 & 0x80u) != 0i64 )
{
LODWORD(PteLimit) = (_DWORD)PteBase;
if( a1 < (unsigned __int64)PteBase || (PteLimit = MmGetPteLimit(), a1 > (unsigned __int64)PteLimit) )
{
LABEL_8:
LOBYTE(PteLimit) = 1;
return(int)PteLimit;
}
break;
}
if( !v5 )
goto LABEL_8;
}
}
LOBYTE(PteLimit) = 0;
return(int)PteLimit;
}Referenced by:
EtwpIsValidImageAddress
IoFreeDumpRange
IoSetDumpRange
IopGetMaxValidMemorySize
IopGetMaxValidMemorySizeDown
IopGetMaxValidSectionSize
IopGetMaxValidSectionSizeDown
KeValidateBugCheckCallbackRecord
KiDumpParameterImages
KiIsAddressRangeValid
KiPcToFileHeader
KiScanBugCheckCallbackList
KiValidateComponentName
MiAddUnicodeStringToCrashDump
MiCommitExistingVad
MiDbgCopyMemory
MiDbgWriteCheck
MiFreedUnusedPfnPagesWorker
MiInPagePageTable
MiIncreaseUsedPtesCount
MiKernelWriteToExecutableMemory
MiMakeSystemAddressValid
MiSetProtectionOnSection
MiWaitForInPageComplete
MmIsAddressValid
MmIsSpecialPoolAddress
RtlMarkHiberPhase
ViFreeTrackedPool