PfpParametersPropagate
VOID __stdcall PfpParametersPropagate(_PFP_SUPERFETCH_PARAMETERS *SuperfetchParameters){
_ETHREAD *CurrentThread;
unsigned int v3;
UINT8 v4;
VOID *v5;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = 0;
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)&stru_140C4DB30 + 954, 0i64);
if( (*(&stru_140C4DB30 + 7640) & 1) != 0 && SuperfetchParameters[20] != *(&stru_140C4DB30 + 2043) )
v3 = 1;
if( (*(&stru_140C4DB30 + 7640) & 2) != 0 && SuperfetchParameters[19] != *(&stru_140C4DB30 + 2045) )
v3 |= 2u;
if( (*(&stru_140C4DB30 + 7640) & 3) != 0 && (SuperfetchParameters[17] & 1) == 0 || v3 )
{
PfTCleanup((_PFP_TRACING_GLOBALS *)&stru_140C4DB30 + 1908);
PfTInitialize((_PFP_TRACING_GLOBALS *)&stru_140C4DB30 + 1908, v4);
PfTStart((PFP_TRACING_GLOBALS *)&stru_140C4DB30 + 1908, v5, v3);
}
if( ((SuperfetchParameters[17] & 2) != 0) != (dword_140C50130[0] & 1) )
{
if( (SuperfetchParameters[17] & 2) != 0 )
{
_InterlockedExchange64(&qword_140C50120, 0i64);
dword_140C50130[0] |= 1u;
}
else
{
PfpRpShutdown((_PFPRP_CONTEXT *)&RpContext);
}
}
if( (_InterlockedExchangeAdd64((_QWORD *)&stru_140C4DB30 + 954, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((_EX_PUSH_LOCK *)&stru_140C4DB30 + 954);
KeAbPostRelease((char *)&stru_140C4DB30 + 7632);
KeLeaveCriticalRegion();
}Referenced by:
PfpParametersWatcher