MiProcessDeleteOnClose

VOID __stdcall MiProcessDeleteOnClose(_MI_PARTITION *Partition, UINT64 Exiting){
  _QWORD *v2; 
  volatile LONG *v3; 
  int v4; 
  unsigned int v5; 
  unsigned __int64 v7; 
  _QWORD *v8; 
  INT64 v9; 
  INT64 *v10; 
  _BYTE *v11; 
  UINT64 inserted; 
  INT16 v13; 
  int v14; 
  unsigned int v15; 
  _FILE_OBJECT *AcquiredFileObject; 
  _MI_CONTROL_AREA_WAIT_BLOCK *Gate; 
  AcquiredFileObject = 0i64;
  v2 = (_QWORD *)((char *)Partition + 1600);
  Gate = 0i64;
  v3 = (volatile LONG *)((char *)Partition + 1344);
  v4 = 0;
  v5 = -1;
  while( 1 )
  {
    v7 = ExAcquireSpinLockExclusive(v3);
    v8 = (_QWORD *)*v2;
    if( (_QWORD *)*v2 == v2 )
      break;
    if( (++v4 & 0x3F) == 0 && *((_DWORD *)Partition + 337) >= v5 )
    {
      if( v8 != v2 )
      {
        *((_BYTE *)Partition + 1680) = 1;
        KiSetTimerEx((_KTIMER *)((char *)Partition + 1616), Mi10Milliseconds, 0i64, 0, 0i64);
        goto LABEL_20;
      }
      break;
    }
    v9 = (INT64)(v8 - 1);
    v15 = *((_DWORD *)Partition + 337);
    v10 = v8 + 8;
    if( !(unsigned int)ExTryAcquireSpinLockExclusiveAtDpcLevel(v10) )
    {
      ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v3);
      __writecr8(v7);
      goto LABEL_2;
    }
    MiUnlinkUnusedControlArea(v9);
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v3);
    if( (*(_DWORD *)(v9 + 56) & 0x20) != 0 )
    {
      LOBYTE(v11) = v7;
      MiDestroySection((_CONTROL_AREA *)v9, (INT16)v11, 0i64);
      goto LABEL_2;
    }
    if( *(_DWORD *)(v9 + 76) )
    {
      inserted = MiInsertUnusedSegment((_CONTROL_AREA *)v9);
      ExReleaseSpinLockExclusiveFromDpcLevel(v10);
      __writecr8(v7);
      if( inserted )
        MiReturnCrossPartitionSectionCharges((volatile INT64 *)Partition, 1i64, inserted);
LABEL_2:
      v5 = v15;
    }
    else
    {
      AcquiredFileObject = 0i64;
      LOBYTE(v11) = v7;
      MiFlushControlArea((_CONTROL_AREA *)v9, v11, &Gate, &AcquiredFileObject);
      if( v14 == 1 )
      {
        LOBYTE(v13) = v7;
        MiDestroySection((_CONTROL_AREA *)v9, v13, AcquiredFileObject);
      }
      v5 = v15;
      if( Gate )
        MiReleaseControlAreaWaiters(Gate);
    }
  }
  *((_BYTE *)Partition + 1680) = 0;
LABEL_20:
  ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)v3);
  __writecr8(v7);
}

Referenced by:

MiDereferenceSegmentThread