PopTimeoutWakeTracking
__int64 __fastcall PopTimeoutWakeTracking(_LIST_ENTRY *a1, __int64 a2, INT64 a3){
int *v4;
_LIST_ENTRY *v5;
__int64 result;
__int64 i;
_KLOCK_QUEUE_HANDLE LockHandle;
int v9[2];
__int64 v10[2];
v9[0] = 393217;
v9[1] = 0;
v10[1] = (__int64)v10;
v4 = 0i64;
v10[0] = (__int64)v10;
memset(&LockHandle, 0, sizeof(LockHandle));
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C23628 + 355, &LockHandle);
if( a1 == (_LIST_ENTRY *)*(&stru_140C23628 + 357) )
{
*(&stru_140C23628 + 357) = 0i64;
*(&stru_140C23628 + 356) = a1;
if( *(&stru_140C23628 + 2904) )
{
for( i = *(&stru_140C23628 + 362);
(_UNKNOWN *)i != (_UNKNOWN *)((char *)&stru_140C23628 + 2888);
i = *(_QWORD *)(i + 8) )
{
if( *(_LIST_ENTRY **)(i + 24) == a1 )
{
*(_QWORD *)(i + 32) = v9;
v4 = v9;
break;
}
}
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
if( v4 )
KeWaitForSingleObject((UINT64)v4, 0, 0, 0, 0i64);
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C23628 + 355, &LockHandle);
if( a1 == (_LIST_ENTRY *)*(&stru_140C23628 + 356) )
{
v5 = (_LIST_ENTRY *)*(&stru_140C23628 + 359);
if( *(_UNKNOWN **)(*(&stru_140C23628 + 359) + 8i64) != (_UNKNOWN *)((char *)&stru_140C23628 + 2872) )
__fastfail(3u);
++*(&stru_140C23628 + 708);
*(&stru_140C23628 + 356) = 0i64;
a1->Blink = (_LIST_ENTRY *)((char *)&stru_140C23628 + 2872);
a1->Flink = v5;
v5->Blink = a1;
*(&stru_140C23628 + 359) = a1;
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
PopFinalizeWakeInfo((__int64)a1);
KeAcquireInStackQueuedSpinLock((PKSPIN_LOCK)&stru_140C23628 + 355, &LockHandle);
}
}
PopWakeInfoDereference((__int64)a1);
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
result = (unsigned int)KiIrqlFlags;
__writecr8(LockHandle.OldIrql);
return result;
}Referenced by:
PopWakeSourceTimeoutWorker