IopInterlockedRemoveHeadList

_LIST_ENTRY *__stdcall IopInterlockedRemoveHeadList(_LIST_ENTRY *ListHead){
  INT64 v1; 
  INT64 v2; 
  UINT8 v4; 
  _LIST_ENTRY *Flink; 
  _LIST_ENTRY *v7; 
  _LIST_ENTRY *Blink; 

  v4 = KeAcquireQueuedSpinLock(10i64, v1, v2);
  Flink = ListHead->Flink;
  if( ListHead->Flink == ListHead )
  {
    Flink = 0i64;
  }
  else
  {
    v7 = Flink->Flink;
    if( Flink->Flink->Blink != Flink || (Blink = Flink->Blink, Blink->Flink != Flink) )
      __fastfail(3u);
    Blink->Flink = v7;
    v7->Blink = Blink;
  }
  KeReleaseQueuedSpinLock(LockQueueIoDatabaseLock, v4);
  return Flink;
}

Referenced by:

IoShutdownSystem
IopCallBootDriverReinitializationRoutines
IopCallDriverReinitializationRoutines