PfpProcessScenarioPhase
NTSTATUS __stdcall PfpProcessScenarioPhase(PF_SCENARIO_PHASE_INFO *PhaseInfo, INT8 PreviousMode){
UINT64 v2;
int v4;
unsigned int v5;
NTSTATUS v6;
INT64 v7;
PF_SCENARIO_PHASE_INFO v9;
int ActiveConsoleId;
VOID *v11;
_PF_PHASED_SCENARIO_TYPE v12;
PF_SCENARIO_PHASE_INFO v13;
_PF_PHASED_SCENARIO_TYPE v14;
int v15;
unsigned int v16;
_ADAPTER_OBJECT *NextSession;
if( *PhaseInfo != 4 )
return -1073741811;
v4 = PhaseInfo[1];
if( (unsigned int)(v4 - 1) > 4 )
return -1073741701;
v5 = PhaseInfo[4] & 1;
if( v4 <= 2 )
goto LABEL_4;
if( v4 != 3 )
{
if( v4 == 4 )
{
v9 = PhaseInfo[2];
v6 = 0;
if( v9 )
{
if( v9 == 1 )
{
ActiveConsoleId = RtlGetActiveConsoleId();
if( PsGetCurrentProcessSessionId() == ActiveConsoleId )
{
PfpScenCtxScenarioSet((_PFP_SCENARIO_CONTEXT *)&ScenCtx, PfScenarioTypeLogon, PfScenarioTypeNone, 0i64);
if( *(&stru_140C4DB30 + 2042) < *(&stru_140C4DB30 + 2043) )
PfpLogScenarioEvent(5, 2, 3, dword_140C50054, 1);
}
}
return v6;
}
v11 = 0i64;
v12 = PfScenarioTypeLogon;
goto LABEL_32;
}
if( v4 == 5 )
{
LABEL_4:
v6 = 0;
if( PreviousMode )
return -1073741790;
v7 = v5 | 4;
if( v4 != 5 )
v7 = v5;
PfPowerActionNotify(
(_EPROCESS *)(unsigned int)PhaseInfo[2],
v7,
(VOID *)((unsigned __int64)(unsigned int)PhaseInfo[4] >> 1));
return v6;
}
return -1073741811;
}
v13 = PhaseInfo[2];
v6 = 0;
if( v13 )
{
if( v13 != 1 || dword_140C50050 != 3 )
return v6;
PfpScenCtxPrefetchWait((PFP_SCENARIO_CONTEXT *)&ScenCtx, PfScenarioTypeFUS, 0x1388ui64, v2);
PfpLogScenarioEvent(3, 0, 0, dword_140C50054, 0);
v11 = 0i64;
v14 = PfScenarioTypeFUS;
v12 = PfScenarioTypeNone;
LABEL_33:
PfpScenCtxScenarioSet((_PFP_SCENARIO_CONTEXT *)&ScenCtx, v14, v12, v11);
return v6;
}
v15 = RtlGetActiveConsoleId();
if( PsGetCurrentProcessSessionId() == v15 && *(&stru_140C4DB30 + 2042) < *(&stru_140C4DB30 + 2043) )
{
v16 = 0;
NextSession = (_ADAPTER_OBJECT *)MmGetNextSession(0i64);
if( NextSession )
{
while( ++v16 < 3 )
{
NextSession = (_ADAPTER_OBJECT *)MmGetNextSession(NextSession);
if( !NextSession )
goto LABEL_30;
}
HalPutDmaAdapter(NextSession);
LABEL_30:
if( v16 >= 3 )
{
v11 = (VOID *)*((_QWORD *)PhaseInfo + 3);
v12 = PfScenarioTypeFUS;
LABEL_32:
v14 = PfScenarioTypeNone;
goto LABEL_33;
}
}
}
return v6;
}Referenced by:
PfSetSuperfetchInformation
PfSnSetPrefetcherInformation