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