PopWakeDeviceList

VOID __stdcall PopWakeDeviceList(_POP_DEVICE_SYS_STATE *DevState, _PO_NOTIFY_ORDER_LEVEL *Level){
  _LIST_ENTRY *p_ReadyS0; 
  signed int v3; 
  _LIST_ENTRY *Flink; 
  int v6; 
  int v7; 
  _PO_DEVICE_NOTIFY *v8; 
  _LIST_ENTRY *v9; 
  _LIST_ENTRY *Blink; 
  _KLOCK_QUEUE_HANDLE LockHandle; 
  _BYTE v12[4]; 
  int v13; 
  __int64 v14[2]; 
  int v15; 
  int v16; 
  char Object[4]; 
  int v18; 
  __int64 v19[2]; 
  int v20; 
  int v21; 

  p_ReadyS0 = &Level->ReadyS0;
  v3 = Level->DeviceCount - Level->ActiveCount;
  Flink = Level->ReadyS0.Flink;
  v6 = 0;
  v12[1] = 0;
  v7 = 0;
  v12[3] = 0;
  v16 = 0;
  memset(&LockHandle, 0, sizeof(LockHandle));
  Object[1] = 0;
  Object[3] = 0;
  v21 = 0;
  while( Flink != p_ReadyS0 )
  {
    Flink = Flink->Flink;
    ++v6;
  }
  Object[0] = 5;
  v19[1] = (__int64)v19;
  v19[0] = (__int64)v19;
  v14[1] = (__int64)v14;
  v14[0] = (__int64)v14;
  DevState->ReadySemaphore = (_KSEMAPHORE *)Object;
  DevState->FinishedSemaphore = (_KSEMAPHORE *)v12;
  Object[2] = 8;
  v18 = v6;
  v20 = v3;
  v12[0] = 5;
  v12[2] = 8;
  v13 = 0;
  v15 = v3;
  if( v3 > 0 )
  {
    do
    {
      KeWaitForSingleObject((UINT64)Object, 0, 0, 0, 0i64);
      KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)rcx0 + 1, &LockHandle);
      v8 = (_PO_DEVICE_NOTIFY *)p_ReadyS0->Flink;
      v9 = p_ReadyS0->Flink->Flink;
      if( p_ReadyS0->Flink->Blink != p_ReadyS0
        || (_PO_DEVICE_NOTIFY *)v9->Blink != v8
        || (p_ReadyS0->Flink = v9,
            v9->Blink = p_ReadyS0,
            Blink = DevState->Pending.Blink,
            Blink->Flink != &DevState->Pending) )
      {
        __fastfail(3u);
      }
      v8->Link.Blink = Blink;
      v8->Link.Flink = &DevState->Pending;
      Blink->Flink = &v8->Link;
      DevState->Pending.Blink = &v8->Link;
      KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
      __writecr8(LockHandle.OldIrql);
      --v3;
      ++v7;
      if( PopIsNotifyForDirectedPowerTransition((INT64)v8) )
        PopIssueDirectedPowerTransition((INT64)DevState, (__int64)v8);
      else
        PopNotifyDevice(DevState, v8);
      if( (*(&stru_140C23628 + 582) & 0x80000) != 0 )
      {
        while( v7 > 0 )
        {
          KeWaitForSingleObject((UINT64)v12, 0, 0, 0, 0i64);
          --v7;
        }
      }
    }
    while( v3 > 0 );
    while( v7 > 0 )
    {
      KeWaitForSingleObject((UINT64)v12, 0, 0, 0, 0i64);
      --v7;
    }
  }
  DevState->ReadySemaphore = 0i64;
  DevState->FinishedSemaphore = 0i64;
}

Referenced by:

PoBroadcastSystemState