VerifierMmUnmapLockedPages
VOID __stdcall VerifierMmUnmapLockedPages(VOID *BaseAddress, ULONG_PTR MemoryDescriptorList){
__int64 v2;
__int64 Param4;
unsigned __int8 CurrentIrql;
ULONG_PTR v6;
__int64 v7;
int v8;
UINT64 v9;
UINT64 v10;
UINT64 v11;
__int128 MemoryInformation;
__int128 v13;
__int128 v14;
_XSTATE_FEATURE *retaddr;
Param4 = *(_QWORD *)&MemoryDescriptorList;
MemoryInformation = 0i64;
v13 = 0i64;
v14 = 0i64;
CurrentIrql = KeGetCurrentIrql();
if( (unsigned __int64)BaseAddress <= 0x7FFFFFFEFFFFi64 )
{
if( CurrentIrql > 1u && (MmVerifierData & 1) != 0 )
{
v6 = 122;
goto LABEL_8;
}
}
else if( CurrentIrql > 2u && (MmVerifierData & 1) != 0 )
{
v6 = 121;
LABEL_8:
VerifierBugCheckIfAppropriate(0xC4ui64, v6, CurrentIrql, (ULONG_PTR)BaseAddress, Param4, v10);
}
if( (unsigned __int64)BaseAddress <= 0x7FFFFFFEFFFFi64 )
{
if( (MmVerifierData & 0x800) != 0 && !PsGetProcessExitProcessCalled(KeGetCurrentThread()->ApcState.Process) )
{
v7 = ((*(_DWORD *)(Param4 + 32) + *(_DWORD *)(Param4 + 44)) & 0xFFF) + *(unsigned int *)(Param4 + 40) + 4095i64;
if( ZwQueryVirtualMemory(-1, BaseAddress, MemoryRegionInformationEx, &MemoryInformation, 48, 0i64) < 0
|| (_QWORD)MemoryInformation != ((unsigned __int64)BaseAddress & 0xFFFFFFFFFFFFF000ui64)
|| (_QWORD)v13 != (v7 & 0xFFFFFFFFFFFFF000ui64)
|| (BYTE12(MemoryInformation) & 1) == 0 )
{
LOBYTE(v8) = VfUtilCheckRuleEnforcement(retaddr);
if( v8 == 1 )
VerifierBugCheckIfAppropriate(0xC4ui64, 0xB9u, (ULONG_PTR)BaseAddress, Param4, 0, v11);
}
}
}
else if( (*(_WORD *)(Param4 + 10) & 1) == 0 && (MmVerifierData & 0x800) != 0 )
{
VerifierBugCheckIfAppropriate(0xC4ui64, 0xB6u, Param4, *(__int16 *)(Param4 + 10), 1u, v10);
}
v9 = -(__int64)*(unsigned int *)(Param4 + 40);
if( (MmVerifierData & 0x1000) != 0 )
ViTargetAddToCounter(retaddr, 0xC0ui64, 0xC8ui64, v9);
((void(__fastcall *)(VOID *, __int64, __int64, UINT64))pXdvMmUnmapLockedPages)(BaseAddress, Param4, v2, v9);
}Referenced by:
No references.