PfpParametersPropagate
void __fastcall PfpParametersPropagate(_DWORD *a1){
_ETHREAD *CurrentThread;
unsigned int v3;
INT64 v4;
INT64 v5;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v3 = 0;
--*((_WORD *)CurrentThread + 242);
ExAcquirePushLockExclusiveEx((UINT64)&PfTGlobals, 0i64);
if( (dword_140C4F908 & 1) != 0 && a1[20] != dword_140C4FB1C )
v3 = 1;
if( (dword_140C4F908 & 2) != 0 && a1[19] != dword_140C4FB24 )
v3 |= 2u;
if( (dword_140C4F908 & 3) != 0 && (a1[17] & 1) == 0 || v3 )
{
PfTCleanup((INT64)&PfTGlobals, v4);
PfTInitialize();
PfTStart((INT64)&PfTGlobals, v5, v3);
}
if( ((a1[17] & 2) != 0) != (dword_140C50130 & 1) )
{
if( (a1[17] & 2) != 0 )
{
_InterlockedExchange64(&qword_140C50120, 0i64);
dword_140C50130 |= 1u;
}
else
{
PfpRpShutdown((INT64)&byte_140C50098);
}
}
if( (_InterlockedExchangeAdd64((volatile signed __int64 *)&PfTGlobals, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock((volatile INT64 *)&PfTGlobals);
KeAbPostRelease(&PfTGlobals);
KeLeaveCriticalRegion();
}Referenced by:
PfpParametersWatcher