PfpServiceMainThreadBoost
NTSTATUS __stdcall PfpServiceMainThreadBoost(PFP_SCENARIO_CONTEXT *ScenCtx, PFP_BOOST_SUPPORT *BoostSupport){
__int64 Dpc;
NTSTATUS v3;
unsigned __int8 v6;
unsigned __int64 v7;
_ETHREAD *v8;
Dpc = *((_QWORD *)BoostSupport + 1);
v3 = 0;
if( !*(_QWORD *)BoostSupport )
return -2147483614;
*(_DWORD *)(Dpc + 160) = 1;
v6 = KeAcquireSpinLockRaiseToDpc((UINT64 *)ScenCtx + 13);
++ScenCtx[28];
v7 = v6;
*(_DWORD *)(Dpc + 164) = ScenCtx[28];
if( !*((_QWORD *)ScenCtx + 11) )
{
v8 = *(_ETHREAD **)BoostSupport;
*((_QWORD *)ScenCtx + 11) = *(_QWORD *)BoostSupport;
*(_QWORD *)BoostSupport = 0i64;
ScenCtx[24] = KeSetActualBasePriorityThread(&v8->Tcb, 12i64);
}
KxReleaseSpinLock((UINT64 *)ScenCtx + 13);
__writecr8(v7);
*(_QWORD *)(Dpc + 64) = 0i64;
*(_QWORD *)(Dpc + 80) = Dpc + 72;
*(_QWORD *)(Dpc + 72) = Dpc + 72;
*(_BYTE *)(Dpc + 64) = 8;
*(_QWORD *)(Dpc + 88) = 0i64;
*(_DWORD *)(Dpc + 124) = 0;
*(_WORD *)(Dpc + 120) = 0;
*(_QWORD *)(Dpc + 24) = PfpPowerActionDpcRoutine;
*(_DWORD *)Dpc = 275;
*(_QWORD *)(Dpc + 32) = Dpc;
*(_QWORD *)(Dpc + 56) = 0i64;
*(_QWORD *)(Dpc + 16) = 0i64;
KiSetTimerEx((_KTIMER *)(Dpc + 64), (_LARGE_INTEGER)-200000000i64, 0i64, 0, (_KDPC *)Dpc);
*((_QWORD *)BoostSupport + 1) = 0i64;
return v3;
}Referenced by:
PfpScenCtxScenarioSet