MiDrainCrossPartitionUsage

VOID __stdcall MiDrainCrossPartitionUsage(INT64 a1){
  unsigned __int64 v2; 
  _QWORD *v3; 
  __int64 v4; 
  _EX_RUNDOWN_REF_CACHE_AWARE *v5; 
  int Object[2]; 
  __int64 v7[2]; 
  _KLOCK_QUEUE_HANDLE LockHandle; 

  Object[0] = 393216;
  Object[1] = 0;
  v7[1] = (__int64)v7;
  v7[0] = (__int64)v7;
  memset(&LockHandle, 0, sizeof(LockHandle));
  KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C4DB30 + 258, &LockHandle);
  ExAcquireSpinLockExclusiveAtDpcLevel((INT64 *)(a1 + 1344));
  *(_DWORD *)(a1 + 4) |= 1u;
  *(_QWORD *)(a1 + 2128) = Object;
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(a1 + 1344));
  KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
  __writecr8(LockHandle.OldIrql);
  MiDecrementControlAreaCount(a1, (volatile signed __int64 *)(a1 + 1360));
  MiDecrementControlAreaCount(a1, (volatile signed __int64 *)(a1 + 1352));
  MiMakeUnusedSegmentDeleteOnClose(a1);
  CcExitPartition();
  KeWaitForSingleObject((UINT64)Object, 0, 0, 0, 0i64);
  v2 = (unsigned __int8)ExAcquireSpinLockExclusive((INT64 *)(a1 + 1344));
  v3 = (_QWORD *)(a1 + 1896);
  v4 = 0i64;
  while( !*v3 )
  {
    ++v4;
    v3 += 4;
    if( v4 >= 7 )
      goto LABEL_6;
  }
  KeResetEvent((_KEVENT *)Object);
  *(_QWORD *)(a1 + 2120) = Object;
LABEL_6:
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(a1 + 1344));
  __writecr8(v2);
  KeWaitForSingleObject((UINT64)Object, 0, 0, 0, 0i64);
  KeResetEvent((_KEVENT *)Object);
  *(_QWORD *)(a1 + 2136) = Object;
  MiDecrementCloneHeaderCount(a1);
  KeWaitForSingleObject((UINT64)Object, 0, 0, 0, 0i64);
  v5 = *(_EX_RUNDOWN_REF_CACHE_AWARE **)(a1 + 2144);
  if( v5 )
    ExWaitForRundownProtectionReleaseCacheAware(v5);
}

Referenced by:

MiDeletePartition