MiDeleteCachedSegment

VOID __stdcall MiDeleteCachedSegment(_MI_PARTITION *Partition, _BYTE *a2){
  INT64 *v2; 
  INT64 v4; 
  _QWORD **v5; 
  unsigned __int64 v6; 
  _QWORD *i; 
  _BYTE *v8; 
  int v9; 
  UINT64 inserted; 
  _MI_CONTROL_AREA_WAIT_BLOCK *v11; 
  _FILE_OBJECT *v12; 
  int v13; 
  _MI_CONTROL_AREA_WAIT_BLOCK *Gate; 
  _FILE_OBJECT *AcquiredFileObject; 
  v2 = (INT64 *)((char *)Partition + 1344);
  v4 = 1i64;
  v5 = (_QWORD **)((char *)Partition + 1704);
  v6 = ExAcquireSpinLockExclusive((PEX_SPIN_LOCK)Partition + 336);
  for( i = *v5; i != v5; i = (_QWORD *)*i )
  {
    v4 = (INT64)(i - 1);
    if( (unsigned int)ExTryAcquireSpinLockExclusiveAtDpcLevel(i + 8) )
      break;
  }
  if( i == v5 )
  {
    ExReleaseSpinLockExclusiveFromDpcLevel(v2);
    __writecr8(v6);
    return;
  }
  MiUnlinkUnusedControlArea(v4);
  ExReleaseSpinLockExclusiveFromDpcLevel(v2);
  v9 = *(_DWORD *)(v4 + 56);
  if( (v9 & 0x20) == 0 && *(_DWORD *)(v4 + 76) && (*((_DWORD *)Partition + 1) & 1) == 0 )
  {
    inserted = MiInsertUnusedSegment((_CONTROL_AREA *)v4);
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)(v4 + 72));
    __writecr8(v6);
    if( inserted )
      MiReturnCrossPartitionSectionCharges((volatile INT64 *)Partition, 1i64, inserted);
    return;
  }
  v11 = 0i64;
  v12 = 0i64;
  Gate = 0i64;
  AcquiredFileObject = 0i64;
  if( (v9 & 0x20) == 0 )
  {
    LOBYTE(v8) = v6;
    MiFlushControlArea((_CONTROL_AREA *)v4, v8, &Gate, &AcquiredFileObject);
    v11 = Gate;
    if( v13 != 1 )
      goto LABEL_17;
    v12 = AcquiredFileObject;
  }
  LOBYTE(v8) = v6;
  MiDestroySection((_CONTROL_AREA *)v4, (INT16)v8, v12);
LABEL_17:
  if( v11 )
    MiReleaseControlAreaWaiters(v11);
}

Referenced by:

MiDereferenceSegmentThread
MiRemoveUnusedSegments