MiFreeCombineBlock

VOID __stdcall MiFreeCombineBlock(_MI_COMBINE_BLOCK *CombineBlock){
  __int64 v1; 
  unsigned __int64 v2; 
  __int64 v4; 
  __int64 v5; 
  __int64 v6; 
  unsigned __int64 v7; 
  _MI_COMBINE_BLOCK **v9; 
  __int64 v10; 
  _MI_COMBINE_BLOCK *v11; 
  unsigned int i; 
  __int64 v13; 
  _MI_COMBINE_BLOCK **v14; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  v1 = *((_QWORD *)CombineBlock + 3);
  v2 = (unsigned __int64)CombineBlock & 0xFFFFFFFFFFFFF000ui64;
  memset(&LockHandle, 0, sizeof(LockHandle));
  v4 = *(_QWORD *)(((unsigned __int64)CombineBlock & 0xFFFFFFFFFFFFF000ui64) + 0x10);
  if( v1 )
  {
    v5 = v1 & 0xF;
    v6 = 16i64 * (unsigned int)v5;
    v7 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)(v6 + v4 + 104));
    RtlAvlRemoveNode((UINT64 *)(v4 + 16 * (v5 + 6)), (INT64 *)CombineBlock);
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v6 + v4 + 104));
    __writecr8(v7);
    *((_QWORD *)CombineBlock + 3) = 0i64;
  }
  CombineBlock[10] &= 0xFFFFFFE0;
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)(v4 + 88), &LockHandle);
  if( (*(_DWORD *)(v2 + 8))-- == 1 )
  {
    v11 = (_MI_COMBINE_BLOCK *)(v2 + 72);
    for( i = 0; i < 0x37; ++i )
    {
      if( v11 != CombineBlock )
      {
        v13 = *(_QWORD *)v11;
        v14 = (_MI_COMBINE_BLOCK **)*((_QWORD *)v11 + 1);
        if( *(_MI_COMBINE_BLOCK **)(*(_QWORD *)v11 + 8i64) != v11 || *v14 != v11 )
          goto LABEL_15;
        *v14 = (_MI_COMBINE_BLOCK *)v13;
        *(_QWORD *)(v13 + 8) = v14;
      }
      v11 += 18;
    }
    *(_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((PWORK_QUEUE_ITEM)(v4 + 32), DelayedWorkQueue);
    }
  }
  else
  {
    v9 = (_MI_COMBINE_BLOCK **)(v4 + 72);
    v10 = *(_QWORD *)(v4 + 72);
    if( *(_QWORD *)(v10 + 8) != v4 + 72 )
LABEL_15:
      __fastfail(3u);
    *(_QWORD *)CombineBlock = v10;
    *((_QWORD *)CombineBlock + 1) = v9;
    *(_QWORD *)(v10 + 8) = CombineBlock;
    *v9 = CombineBlock;
  }
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  _InterlockedExchangeAdd((volatile signed __int32 *)(v4 + 388), 0xFFFFFFFF);
}

Referenced by:

MiDecrementCombinedPte
MiDemoteCombinedPte
MiProcessCrcList