KeQueryWakeSource

INT64 __fastcall KeQueryWakeSource(INT64 *a1, BYTE *a2){
  INT64 result; 
  unsigned __int8 CurrentIrql; 
  struct _KPRCB *CurrentPrcb; 
  _QWORD *v7; 
  __int64 v8; 
  _QWORD *v9; 
  __int64 v10; 
  __int64 v11; 
  UINT64 v12; 
  int v13; 
  unsigned int v14; 
  INT64 CurrentQpc; 
  BYTE v16; 
  BYTE v17; 
  v14 = 0;
  CurrentQpc = 0i64;
  v16 = 0;
  v17 = 0;
  memset((INT64)a2, 0i64);
  result = ((__int64(__fastcall *)(unsigned int *, _QWORD))off_140C008E8[0])(&v14, 0i64);
  if( (int)result >= 0 )
  {
    if( ((v14 - 209) & 0xFFFFFFFD) != 0 )
    {
      *(_DWORD *)a1 = 5;
      CurrentIrql = KeGetCurrentIrql();
      __writecr8(0xFui64);
      if( v14 <= 0xFF
        && (_mm_lfence(),
            CurrentPrcb = KeGetCurrentPrcb(),
            (v7 = (_QWORD *)*((_QWORD *)CurrentPrcb + v14 + 1576)) != 0i64) )
      {
        v8 = 0i64;
        v9 = (_QWORD *)*((_QWORD *)CurrentPrcb + v14 + 1576);
        do
        {
          v10 = v9[4];
          if( v10 || (v10 = v9[3]) != 0 )
            *(_QWORD *)&a2[8 * v8] = v10;
          v11 = v9[1];
          v8 = (unsigned int)(v8 + 1);
          if( !v11 )
            break;
          v9 = (_QWORD *)(v11 - 8);
          if( v9 == v7 )
            break;
        }
        while( (unsigned int)v8 < 3 );
      }
      else
      {
        *(_DWORD *)a1 = 2;
      }
      __writecr8(CurrentIrql);
    }
    else
    {
      LODWORD(v12) = RtlGetInterruptTimePrecise(&CurrentQpc);
      if( (unsigned int)KiGetPastDueIRTimerInfo(v12, &v16, &v17) )
      {
        v13 = 6;
        *a2 = v16;
        a2[2] = v17;
      }
      else
      {
        v13 = 1;
      }
      *(_DWORD *)a1 = v13;
    }
  }
  else
  {
    if( (_DWORD)result != -1073741823 )
      return result;
    *(_DWORD *)a1 = 0;
  }
  return 0i64;
}

Referenced by:

PpmIdleExecuteTransition