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