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.