MiUnlinkSubsectionWaitBlock

VOID __stdcall MiUnlinkSubsectionWaitBlock(
        _SUBSECTION *Subsection,
        _MI_CONTROL_AREA_WAIT_BLOCK *CreationGate,
        UINT64 ControlAreaLockHeld){
  _CONTROL_AREA *ControlArea; 
  unsigned __int8 v6; 
  union {unsigned int LongFlags;_MMSECTION_FLAGS Flags;} v7; 
  _RTL_BALANCED_NODE *v8; 
  _RTL_BALANCED_NODE *WaitList; 
  _RTL_BALANCED_NODE *v10; 

  ControlArea = Subsection->ControlArea;
  if( (_DWORD)ControlAreaLockHeld == 1 )
    v6 = 17;
  else
    v6 = ExAcquireSpinLockExclusive((INT64 *)&ControlArea->ControlAreaLock);
  if( !*((_DWORD *)CreationGate + 3) )
  {
    v7.LongFlags = (unsigned int)ControlArea->u;
    v8 = 0i64;
    if( (v7.LongFlags & 0x20) != 0 )
      WaitList = (_RTL_BALANCED_NODE *)ControlArea->WaitList;
    else
      WaitList = Subsection->GlobalPerSessionHead.Root;
    if( !WaitList )
      goto LABEL_13;
    do
    {
      if( WaitList == (_RTL_BALANCED_NODE *)CreationGate )
        break;
      v8 = WaitList;
      WaitList = WaitList->Children[0];
    }
    while( WaitList );
    if( v8 )
    {
      v8->Children[0] = WaitList->Children[0];
    }
    else
    {
LABEL_13:
      v10 = WaitList->Children[0];
      if( (v7.LongFlags & 0x20) != 0 )
        ControlArea->WaitList = (_MI_CONTROL_AREA_WAIT_BLOCK *)v10;
      else
        Subsection->GlobalPerSessionHead.Root = v10;
    }
  }
  if( v6 != 17 )
  {
    ExReleaseSpinLockExclusiveFromDpcLevel((INT64 *)&ControlArea->ControlAreaLock);
    __writecr8(v6);
  }
}

Referenced by:

MiAllocateFileExtents
MiChangingSubsectionProtos