VerifierMmUnmapLockedPages
VOID __fastcall VerifierMmUnmapLockedPages(VOID *BaseAddress, _MDL *MemoryDescriptorList){
__int64 v2;
unsigned __int8 CurrentIrql;
UINT64 v6;
__int64 v7;
int v8;
UINT64 v9;
UINT64 v10;
UINT64 v11;
__int128 MemoryInformation;
__int128 v13;
__int128 v14;
VOID *retaddr;
MemoryInformation = 0i64;
v13 = 0i64;
v14 = 0i64;
CurrentIrql = KeGetCurrentIrql();
if( (unsigned __int64)BaseAddress <= 0x7FFFFFFEFFFFi64 )
{
if( CurrentIrql > 1u && (MmVerifierData & 1) != 0 )
{
v6 = 122i64;
goto LABEL_8;
}
}
else if( CurrentIrql > 2u && (MmVerifierData & 1) != 0 )
{
v6 = 121i64;
LABEL_8:
VerifierBugCheckIfAppropriate(0xC4ui64, v6, CurrentIrql, (UINT64)BaseAddress, (UINT64)MemoryDescriptorList, v10);
}
if( (unsigned __int64)BaseAddress <= 0x7FFFFFFEFFFFi64 )
{
if( (MmVerifierData & 0x800) != 0 && !PsGetProcessExitProcessCalled(*((_QWORD *)KeGetCurrentThread() + 23)) )
{
v7 = ((LODWORD(MemoryDescriptorList->StartVa) + MemoryDescriptorList->ByteOffset) & 0xFFF)
+ MemoryDescriptorList->ByteCount
+ 4095i64;
if( ZwQueryVirtualMemory(
(PVOID)0xFFFFFFFFFFFFFFFFi64,
BaseAddress,
MemoryWorkingSetExList|MemoryBasicVlmInformation,
&MemoryInformation,
0x30ui64,
0i64) < 0
|| (_QWORD)MemoryInformation != ((unsigned __int64)BaseAddress & 0xFFFFFFFFFFFFF000ui64)
|| (_QWORD)v13 != (v7 & 0xFFFFFFFFFFFFF000ui64)
|| (BYTE12(MemoryInformation) & 1) == 0 )
{
VfUtilCheckRuleEnforcement(retaddr);
if( v8 == 1 )
VerifierBugCheckIfAppropriate(
0xC4ui64,
0xB9ui64,
(UINT64)BaseAddress,
(UINT64)MemoryDescriptorList,
0i64,
v11);
}
}
}
else if( (MemoryDescriptorList->MdlFlags & 1) == 0 && (MmVerifierData & 0x800) != 0 )
{
VerifierBugCheckIfAppropriate(
0xC4ui64,
0xB6ui64,
(UINT64)MemoryDescriptorList,
MemoryDescriptorList->MdlFlags,
1ui64,
v10);
}
v9 = -(__int64)MemoryDescriptorList->ByteCount;
if( (MmVerifierData & 0x1000) != 0 )
ViTargetAddToCounter(retaddr, 0xC0ui64, 0xC8ui64, v9);
((void(__fastcall *)(VOID *, _MDL *, __int64, UINT64))pXdvMmUnmapLockedPages)(
BaseAddress,
MemoryDescriptorList,
v2,
v9);
}Referenced by:
No references.