MiReturnMdlExcess

VOID __stdcall MiReturnMdlExcess(INT64 rcx0){
  unsigned int *v1; 
  _MI_PARTITION *v3; 
  unsigned __int64 v4; 
  UINT64 v5; 
  UINT64 v6; 
  int v7; 
  _MI_PFN_CACHE_ATTRIBUTE v8; 
  UINT64 v9; 
  _WORD *Pool; 
  _WORD *v11; 
  UINT64 v12; 

  v1 = *(unsigned int **)(rcx0 + 64);
  v3 = *(_MI_PARTITION **)rcx0;
  v4 = (unsigned __int64)v1[10] >> 12;
  v5 = *(_QWORD *)(rcx0 + 40) - v4;
  MiReleaseNonPagedResources(*(_MI_PARTITION **)rcx0, v5);
  if( v3 == &Irp )
    _InterlockedExchangeAdd64((_QWORD *)&stru_140C4DB30 + 569, -(__int64)v5);
  if( !v4 )
    goto LABEL_4;
  v7 = *(_DWORD *)(rcx0 + 8);
  if( (v7 & 4) != 0 )
  {
    if( (v7 & 0x40) == 0 )
    {
      MiInitializeMdlBatchPages(rcx0);
      MiInitializeMdlPages((ULONG_PTR)v1, *(unsigned int *)(rcx0 + 8), v8, v9, v12);
    }
    MiFreePagesFromMdl(v1, 0i64, v6);
LABEL_4:
    ExFreePoolWithTag(v1, 0);
    *(_QWORD *)(rcx0 + 64) = 0i64;
    return;
  }
  if( v5 > 0x800 )
  {
    Pool = MiAllocatePool(64i64, 8 * v4 + 48, 0x69646D4Dui64);
    v11 = Pool;
    if( Pool )
    {
      *(_QWORD *)Pool = 0i64;
      Pool[4] = 8 * (v4 + 6);
      *((_DWORD *)Pool + 10) = (_DWORD)v4 << 12;
      Pool[5] = 0;
      *((_QWORD *)Pool + 4) = 0i64;
      *((_DWORD *)Pool + 11) = 0;
      memmove(Pool + 24, (const VOID *)(*(_QWORD *)(rcx0 + 64) + 48i64), 8 * v4);
      ExFreePoolWithTag(*(PVOID *)(rcx0 + 64), 0);
      *(_QWORD *)(rcx0 + 64) = v11;
    }
  }
}

Referenced by:

MiAllocatePagesForMdl