MiUnmapLockedPagesInUserSpace

VOID __fastcall MiUnmapLockedPagesInUserSpace(VOID *BaseAddress, MDL *MemoryDescriptorList){
  __int64 v4; 
  INT64 v5; 
  ULONG_PTR v6; 
  __int64 v7; 
  unsigned __int64 v8; 
  _MI_VAD_EVENT_BLOCK *OldestSecure; 
  unsigned __int64 v10; 
  __int128 v11[3]; 
  INT64 v12; 
  v4 = *((_QWORD *)KeGetCurrentThread() + 23);
  v5 = MiObtainReferencedVadEx((UINT64)BaseAddress, 1, &v12);
  v6 = v5;
  if( v5 )
  {
    v7 = *(unsigned int *)(v5 + 24);
    v8 = (v7 | ((unsigned __int64)*(unsigned __int8 *)(v5 + 32) << 32)) << 12;
    if( (*(_DWORD *)(v5 + 48) & 0x70) != 16
      || ((unsigned __int64)BaseAddress & 0xFFFFFFFFFFFFF000ui64) != v8
      || MemoryDescriptorList != (MDL *)((*(unsigned int *)(v5 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v5 + 33) << 32))
                                       - (v7 | ((unsigned __int64)*(unsigned __int8 *)(v5 + 32) << 32))
                                       + 1) )
    {
      goto LABEL_9;
    }
    OldestSecure = (_MI_VAD_EVENT_BLOCK *)MiLocateOldestSecure(v5);
    if( !OldestSecure )
      KeBugCheckEx(0x1Au, 0x1402ui64, (ULONG_PTR)BaseAddress, v6, 0i64);
    MiRemoveSecureEntry((_MMVAD *)v6, OldestSecure);
    if( (*(_DWORD *)(v6 + 48) & 8) != 0
      && (*(_DWORD *)(v4 + 1124) & 0x20) == 0
      && (int)MiCheckSecuredVad(
                v6,
                v8,
                ((*(unsigned int *)(v6 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v6 + 33) << 32))
               - (*(unsigned int *)(v6 + 24) | ((unsigned __int64)*(unsigned __int8 *)(v6 + 32) << 32))
               + 1) << 12,
                0x55u,
                0) < 0 )
    {
      v10 = ((*(unsigned int *)(v6 + 28) | ((unsigned __int64)*(unsigned __int8 *)(v6 + 33) << 32)) << 12) | 0xFFF;
      memset(v11, 0, sizeof(v11));
      MiDeleteVirtualAddresses(v8, v10, 64, v11);
LABEL_9:
      MiUnlockAndDereferenceVad((PVOID)v6);
      return;
    }
    MiDeleteVad((_MMVAD *)v6, 0i64);
  }
}

Referenced by:

MmUnlockPages
MmUnmapLockedPages