PopPolicyWorkerAction

__int64 PopPolicyWorkerAction(){
  char v0; 
  __int64 v1; 
  _SYSTEM_POWER_STATE v2; 
  unsigned int v3; 
  POWER_POLICY_DEVICE_TYPE v4; 
  unsigned int v5; 
  __int64 *i; 
  UINT64 v7; 
  UINT64 Flag; 
  __int64 v10; 
  unsigned int v11; 
  int v12; 
  EVENT_DATA_DESCRIPTOR EventData; 
  v0 = 0;
  PopAcquirePolicyLock();
  qword_140C23410 = (__int64)KeGetCurrentThread();
  if( byte_140C23261 == 1 )
  {
    v1 = Action;
    v2 = *(&Action + 1);
    v3 = *(_DWORD *)Flags;
    PopSetPowerActionState(2u);
    v4 = SleepReason;
    v5 = PopIssueActionRequest(0, (POWER_ACTION)v1, v2, v3);
    v0 = 1;
    if( (PopAction & 2) != 0 )
    {
      if( *(&Action + 1) == PowerActionShutdownReset )
        v4 = PolicyImmediateDozeS4;
      SleepReason = v4;
      *(_DWORD *)Flags = *(_DWORD *)Flags & 0x7FFFFFDC | 0x80000020;
      LOBYTE(PopAction) = PopAction & 0xFD;
      PopSetPowerActionState(1u);
      v7 = 2i64;
    }
    else
    {
      if( (*(_WORD *)(&PerfGlobalGroupMask + 2) & 0x8000) != 0 )
      {
        v12 = 0;
        EventData.Reserved = 0;
        EventData.Ptr = (unsigned __int64)&v10;
        v10 = v1;
        v11 = v5;
        EventData.Size = 16;
        LODWORD(Flag) = 4200450;
        EtwTraceKernelEvent(&EventData, 1ui64, 0x80008000ui64, 0x1223u, Flag);
      }
      dword_140C23270 = v5;
      PopSetPowerActionState(0);
      for( i = (__int64 *)PopActionWaiters; i != &PopActionWaiters; i = (__int64 *)*i )
        PopCompleteAction(i[2], v5);
      v7 = 1i64;
    }
    PopGetPolicyWorker(v7);
  }
  qword_140C23410 = 0i64;
  PopReleasePolicyLock();
  if( v0 && PoPdcCallbacks )
    PoPdcCallbacks();
  if( *((_DWORD *)KeGetCurrentThread() + 121) )
    __fastfail(0x20u);
  return 0i64;
}

Referenced by:

No references.