MiFreeCombineBlock

INT64 __fastcall MiFreeCombineBlock(INT64 a1){
  __int64 v1; 
  unsigned __int64 v2; 
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  INT64 *v9; 
  __int64 v10; 
  INT64 result; 
  _QWORD *v12; 
  unsigned int i; 
  __int64 v14; 
  _QWORD *v15; 
  struct _KLOCK_QUEUE_HANDLE LockHandle; 
  v1 = *(_QWORD *)(a1 + 24);
  v2 = a1 & 0xFFFFFFFFFFFFF000ui64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  v4 = *(_QWORD *)((a1 & 0xFFFFFFFFFFFFF000ui64) + 0x10);
  if( v1 )
  {
    v5 = v1 & 0xF;
    v6 = 16i64 * (unsigned int)v5;
    v7 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)(v6 + v4 + 104));
    RtlAvlRemoveNode((unsigned __int64 *)(v4 + 16 * (v5 + 6)), (__int64 *)a1);
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v6 + v4 + 104));
    __writecr8(v7);
    *(_QWORD *)(a1 + 24) = 0i64;
  }
  *(_DWORD *)(a1 + 40) &= 0xFFFFFFE0;
  KeAcquireInStackQueuedSpinLock((UINT64 *)(v4 + 88), &LockHandle);
  if( (*(_DWORD *)(v2 + 8))-- == 1 )
  {
    v12 = (_QWORD *)(v2 + 72);
    for( i = 0; i < 0x37; ++i )
    {
      if( v12 != (_QWORD *)a1 )
      {
        v14 = *v12;
        v15 = (_QWORD *)v12[1];
        if( *(_QWORD **)(*v12 + 8i64) != v12 || (_QWORD *)*v15 != v12 )
          goto LABEL_15;
        *v15 = v14;
        *(_QWORD *)(v14 + 8) = v15;
      }
      v12 += 9;
    }
    *(_QWORD *)v2 = *(_QWORD *)(v4 + 24);
    *(_QWORD *)(v4 + 24) = v2;
    if( !*(_QWORD *)v2 )
    {
      *(_QWORD *)(v4 + 32) = 0i64;
      *(_QWORD *)(v4 + 48) = MiFreeCombinePool;
      *(_QWORD *)(v4 + 56) = v4;
      ExQueueWorkItem((WORK_QUEUE_ITEM *)(v4 + 32), DelayedWorkQueue);
    }
  }
  else
  {
    v9 = (INT64 *)(v4 + 72);
    v10 = *(_QWORD *)(v4 + 72);
    if( *(_QWORD *)(v10 + 8) != v4 + 72 )
LABEL_15:
      __fastfail(3u);
    *(_QWORD *)a1 = v10;
    *(_QWORD *)(a1 + 8) = v9;
    *(_QWORD *)(v10 + 8) = a1;
    *v9 = a1;
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  result = (unsigned int)KiIrqlFlags;
  __writecr8(LockHandle.OldIrql);
  _InterlockedExchangeAdd((volatile signed __int32 *)(v4 + 388), 0xFFFFFFFF);
  return result;
}

Referenced by:

MiDecrementCombinedPte
MiDemoteCombinedPte
MiProcessCrcList