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