MiDeleteControlAreaList

VOID __stdcall MiDeleteControlAreaList(_MI_PARTITION *Partition){
  _MI_PARTITION_SEGMENTS *p_Segments; 
  unsigned __int8 v3; 
  _SINGLE_LIST_ENTRY *Next; 
  unsigned __int64 v5; 

  p_Segments = &Partition->Segments;
  while( 1 )
  {
    v3 = ExAcquireSpinLockExclusive((INT64 *)&p_Segments->SegmentListLock);
    Next = Partition->Segments.ControlAreaDeleteList.Next;
    v5 = v3;
    if( Next )
      Partition->Segments.ControlAreaDeleteList = (_SINGLE_LIST_ENTRY)Next->Next;
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&p_Segments->SegmentListLock);
    __writecr8(v5);
    if( !Next )
      break;
    MiDeleteControlArea((_CONTROL_AREA *)Next);
  }
}

Referenced by:

MiDereferenceSegmentThread