PfPowerActionNotify

VOID __stdcall PfPowerActionNotify(_EPROCESS *PhaseId, INT64 Flags, VOID *Context){
  int v3; 
  int v4; 
  int v5; 
  int v6; 
  NTSTATUS v7; 
  UINT64 v8; 
  PF_PHASED_SCENARIO_TYPE v9; 
  UINT64 v10; 
  int v11; 
  NTSTATUS v12; 

  v12 = 0;
  v3 = 1;
  v4 = (int)Context;
  v11 = 2 * (_DWORD)PhaseId;
  if( (Flags & 1) != 0 )
    v11 = (2 * (_DWORD)PhaseId) | 1;
  if( !(_DWORD)PhaseId )
  {
    if( (unsigned int)((_DWORD)Context - 2) > 2 )
    {
      if( (_DWORD)Context != 5 )
        return;
      v3 = (Flags & 4) != 0 ? 5 : 2;
    }
    PfpScenCtxScenarioSet((_PFP_SCENARIO_CONTEXT *)&ScenCtx, PfScenarioTypeNone, (_PF_PHASED_SCENARIO_TYPE)v3, 0i64);
    return;
  }
  v5 = (_DWORD)PhaseId - 1;
  if( v5 )
  {
    v6 = v5 - 1;
    if( v6 )
    {
      if( v6 == 5 && (unsigned int)((_DWORD)Context - 2) <= 2 )
        PfpLogScenarioEvent(1, 2, 1, dword_140C50054, 0);
LABEL_7:
      v12 = ((KUSER_SHARED_DATA.TickCountMultiplier * KUSER_SHARED_DATA.TickCount.High1Time) << 8)
          + ((KUSER_SHARED_DATA.TickCount.LowPart * (unsigned __int64)KUSER_SHARED_DATA.TickCountMultiplier) >> 24);
LABEL_8:
      PfLogEvent(
        28,
        dword_140C5001C
      + ((((KUSER_SHARED_DATA.TickCountMultiplier * (unsigned __int64)KUSER_SHARED_DATA.ReservedTickCountOverlay[1]) << 8)
        + ((KUSER_SHARED_DATA.TickCountMultiplier * (unsigned __int64)KUSER_SHARED_DATA.TickCount.LowPart) >> 24)) >> 10),
        &v11,
        8u);
      return;
    }
    PfpPowerActionStartScenarioTracing((_PFP_SCENARIO_CONTEXT *)&ScenCtx);
    if( dword_140C50050 == 5 )
      PfSnBeginBootPhase(4ui64);
    PfpScenCtxScenarioSet((_PFP_SCENARIO_CONTEXT *)&ScenCtx, PfScenarioTypeStandby, PfScenarioTypeNone, 0i64);
    PfpScenCtxScenarioSet((_PFP_SCENARIO_CONTEXT *)&ScenCtx, PfScenarioTypeHibernate, PfScenarioTypeNone, 0i64);
    PfpScenCtxScenarioSet((_PFP_SCENARIO_CONTEXT *)&ScenCtx, PfScenarioTypeHiberBoot, PfScenarioTypeNone, 0i64);
    if( PfpStartLoggingHardFaultEvents() >= 0 )
      goto LABEL_7;
  }
  else if( (unsigned int)((_DWORD)Context - 2) <= 3 )
  {
    MmPerformMemoryListCommand(MemoryCaptureAndResetAccessedBits);
    v7 = PfTSetTraceWorkerPriority(16i64);
    PfGenerateTrace((PFP_LOGGING_WORKER_CONTEXT *)&stru_140C4DB30 + 1934, 1ui64);
    if( v7 <= 31 )
      PfTSetTraceWorkerPriority((unsigned int)v7);
    v9 = PfScenarioTypeHiberBoot;
    if( v4 == 5 )
    {
      v10 = HIDWORD(qword_140C4FE54);
      if( dword_140C50050 == 5 )
        v10 = (unsigned int)WaitTimeMax;
      if( dword_140C50050 != 5 )
        v9 = PfScenarioTypeHibernate;
    }
    else
    {
      v10 = (unsigned int)qword_140C4FE54;
      v9 = PfScenarioTypeStandby;
    }
    v12 = PfpScenCtxPrefetchWait((PFP_SCENARIO_CONTEXT *)&ScenCtx, v9, v10, v8);
    PfpServiceMainThreadUnboost(0i64);
    goto LABEL_8;
  }
}

Referenced by:

PfpProcessScenarioPhase
PopDispatchSuperfetchNotification
PopIssueActionRequest
PopTransitionSystemPowerStateEx
PopUmpoProcessPowerMessage
PopUmpoSendLegacyEvent