PopIsWakeTimerImmanent

BOOL __stdcall PopIsWakeTimerImmanent(UINT64 MinimumDueTime, INT64 a2, INT64 a3, UINT64 *a4, INT64 a5){
  UINT64 v6; 
  _DIAGNOSTIC_BUFFER *v7; 
  _DIAGNOSTIC_BUFFER *v8; 
  UINT64 v9; 
  bool v10; 
  UINT64 v12; 
  UINT64 v13; 
  bool v14; 
  UINT8 NextWakeTime; 
  bool v16; 
  UINT8 v17; 
  UINT64 DueTime; 
  _DIAGNOSTIC_BUFFER *WakeTimerInfo; 
  UINT64 v21; 
  _DIAGNOSTIC_BUFFER *v22; 
  int v24; 
  INT64 a5a; 

  v24 = a3;
  v6 = -1i64;
  v7 = 0i64;
  DueTime = -1i64;
  v8 = 0i64;
  v21 = -1i64;
  v9 = MinimumDueTime;
  WakeTimerInfo = 0i64;
  *(_QWORD *)a5 = 0i64;
  v10 = 0;
  v22 = 0i64;
  v12 = -1i64;
  if( qword_140C23320 && PopDozeDeferralMaxSeconds )
  {
    v13 = qword_140C23320 + 10000000i64 * (unsigned int)PopDozeDeferralMaxSeconds;
    a5a = v13;
    if( (_DWORD)a2 )
    {
      v14 = (_DWORD)a2 == 2 && *(&stru_140C23628 + 582) >= 0;
      NextWakeTime = ExGetNextWakeTime(MinimumDueTime, v13, v14, &DueTime, &WakeTimerInfo);
      v6 = DueTime;
      v8 = WakeTimerInfo;
      LODWORD(a3) = v24;
      v13 = a5a;
      v9 = MinimumDueTime;
      v10 = NextWakeTime != 0;
    }
    if( (_DWORD)a3 )
    {
      v16 = (_DWORD)a3 == 2 && *(&stru_140C23628 + 582) >= 0;
      v17 = ExGetNextWakeTime(v9, v13, v16, &v21, &v22);
      v12 = v21;
      v7 = v22;
      if( v17 )
        v10 = 1;
    }
    if( v10 )
    {
      if( v6 > v12 )
      {
        if( v8 )
          ExFreePoolWithTag(v8, 0x53577254u);
        *a4 = v12;
        *(_QWORD *)a5 = v7;
      }
      else
      {
        if( v7 )
          ExFreePoolWithTag(v7, 0x53577254u);
        *a4 = v6;
        *(_QWORD *)a5 = v8;
      }
    }
  }
  return v10;
}

Referenced by:

PopDeferDoze