PfTAccessTracingStart

VOID __stdcall PfTAccessTracingStart(
        _PFP_TRACING_GLOBALS *TGlobals,
        _PF_KERNEL_GLOBALS *KGlobals,
        _PFP_TRACE_STOP_REASONS StartReason){
  _ETHREAD *CurrentThread; 
  _EX_PUSH_LOCK *v7; 
  __int32 v8; 
  bool v9; 
  unsigned int DefaultPagePriority; 

  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --CurrentThread->Tcb.KernelApcDisable;
  v7 = (_EX_PUSH_LOCK *)(TGlobals + 4);
  ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)TGlobals + 2, 0i64);
  v8 = ~StartReason;
  v9 = (v8 & TGlobals[3]) == 0;
  TGlobals[3] &= v8;
  if( v9 )
  {
    KGlobals->AccessBufferMax = 256;
    DefaultPagePriority = MmGetDefaultPagePriority();
    MmSetAccessLogging(1ui64, DefaultPagePriority);
    MmEnablePeriodicAccessClearing(1u);
  }
  if( (_InterlockedExchangeAdd64(&v7->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v7);
  KeAbPostRelease(v7);
  KeLeaveCriticalRegion();
}

Referenced by:

PfGetCompletedTrace
PfTStart
PfpPowerActionStartScenarioTracing