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