MiFreeMdlTracker

NTSTATUS __stdcall MiFreeMdlTracker(ULONG_PTR MemoryDescriptorList, UINT64 NumberOfPages){
  PEPROCESS v2; 
  void *v4; 
  unsigned __int64 *LockedPagesList; 
  VOID *v6; 
  _QWORD *v7; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  v2 = *(PEPROCESS *)(*(_QWORD *)&MemoryDescriptorList + 16i64);
  v4 = *(void **)&MemoryDescriptorList;
  memset(&LockHandle, 0, sizeof(LockHandle));
  if( v2 || (v2 = PsInitialSystemProcess) != 0i64 )
  {
    LockedPagesList = (unsigned __int64 *)v2->LockedPagesList;
    if( LockedPagesList )
    {
      v6 = 0i64;
      KeAcquireInStackQueuedSpinLock(LockedPagesList + 3, &LockHandle);
      v7 = (_QWORD *)*LockedPagesList;
      while( v7 )
      {
        if( (unsigned __int64)v4 < v7[3] )
        {
          v7 = (_QWORD *)*v7;
        }
        else
        {
          if( (unsigned __int64)v4 <= v7[3] )
          {
            v6 = v7;
            MiValidateMdlTracker(v7);
            RtlAvlRemoveNode(LockedPagesList, v7);
            LockedPagesList[2] -= NumberOfPages;
            break;
          }
          v7 = (_QWORD *)v7[1];
        }
      }
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      __writecr8(LockHandle.OldIrql);
      if( v6 )
      {
        ExFreeToNPagedLookasideList((_NPAGED_LOOKASIDE_LIST *)((char *)&stru_140C4DB30 + 3152), v6);
      }
      else if( *((_DWORD *)LockedPagesList + 8) )
      {
        KeBugCheckEx(0x76u, (PVOID)1, v4, (PVOID)v2->NumberOfLockedPages, v2->LockedPagesList);
      }
    }
  }
  return 1;
}

Referenced by:

MmUnlockPages