PopDeferDoze

UINT8 __stdcall PopDeferDoze(INT64 a1, INT64 a2, _BYTE *a3){
  int v3; 
  UINT8 v4; 
  unsigned int v6; 
  unsigned int v7; 
  CHAR IsDozeSupported; 
  int v9; 
  int v10; 
  int v11; 
  int v12; 
  int v13; 
  INT64 v14; 
  unsigned int v15; 
  INT64 v16; 
  void *v17; 
  __int64 a5[2]; 
  int v20; 
  int v21; 
  UINT64 a4; 

  a5[0] = 0i64;
  v3 = 0;
  v20 = 0;
  v21 = 0;
  v4 = 0;
  a4 = 0i64;
  v6 = a2;
  v7 = a1;
  IsDozeSupported = PopIsDozeSupported((_BYTE *)&stru_140C23628 + 2072);
  v10 = v9 | 0x10;
  if( IsDozeSupported )
    v10 = v9;
  v11 = v10 | 0x20;
  if( *(_DWORD *)(*(&stru_140C23628 + 232) + 88i64) )
    v11 = v10;
  if( PopQueryPowerSettingUlong(&GUID_LEGACY_RTC_MITIGATION, &v20, &v21) )
  {
    v3 = v20;
    if( !*a3 )
      v3 = v21;
  }
  v12 = v11 | 0x40;
  if( v3 )
    v12 = v11;
  v13 = v12;
  if( a3[3] && *a3 && v20 == 1 && !v21 )
    v13 = v12 | 0x100;
  v14 = *(_QWORD *)&KUSER_SHARED_DATA.InterruptTime.LowPart;
  if( !PopIsWakeTimerImmanent(*(UINT64 *)&KUSER_SHARED_DATA.InterruptTime.LowPart, v7, v6, &a4, (INT64)a5) )
    v13 |= 0x80u;
  v15 = ~PopDozeDeferralChecksToIgnore & v13;
  if( !v15 )
  {
    v4 = 1;
    PopPrintEx(3ui64, (INT8 *)"Deferring doze to S4\n");
  }
  v16 = v14;
  v17 = (void *)a5[0];
  PopDiagTraceDozeDeferralDecision(v4, v15, a5[0], v16, a4, v7, v6);
  if( v17 )
    ExFreePoolWithTag(v17, 0x53577254u);
  return v4;
}

Referenced by:

PopTransitionSystemPowerStateEx