PopGetCurrentWakeInfos
INT64 __fastcall PopGetCurrentWakeInfos(CHAR **a1){
CHAR *v2;
unsigned int v3;
CHAR *PoolWithTag;
__int64 v5;
__int64 i;
INT64 result;
struct _KLOCK_QUEUE_HANDLE LockHandle;
memset(&LockHandle, 0, sizeof(LockHandle));
v2 = 0i64;
KeAcquireInStackQueuedSpinLock(&PopWakeSourceLock, &LockHandle);
v3 = PopWakeInfoCount;
if( PopWakeInfoCount )
{
PoolWithTag = (CHAR *)ExAllocatePoolWithTag(NonPagedPoolNx, 8i64 * (unsigned int)PopWakeInfoCount, 0x206D654Dui64);
v2 = PoolWithTag;
if( PoolWithTag )
{
v5 = PopWakeInfoList;
for( i = 0i64; (__int64 *)v5 != &PopWakeInfoList && (unsigned int)i < v3; i = (unsigned int)(i + 1) )
{
*(_QWORD *)&PoolWithTag[8 * i] = v5;
_InterlockedIncrement((volatile signed __int32 *)(v5 + 16));
v5 = *(_QWORD *)v5;
}
}
else
{
v3 = 0;
}
}
KeReleaseInStackQueuedSpinLockFromDpcLevel(&LockHandle);
__writecr8(LockHandle.OldIrql);
result = v3;
*a1 = v2;
return result;
}Referenced by:
PopGetWakeSource