PfTAccessTracingStart

void __fastcall PfTAccessTracingStart(__int64 a1, __int64 a2, int a3){
  _ETHREAD *CurrentThread; 
  volatile INT64 *v7; 
  int v8; 
  bool v9; 
  unsigned int DefaultPagePriority; 
  CurrentThread = (_ETHREAD *)KeGetCurrentThread();
  --*((_WORD *)CurrentThread + 242);
  v7 = (volatile INT64 *)(a1 + 16);
  ExAcquirePushLockExclusiveEx(a1 + 16, 0i64);
  v8 = ~a3;
  v9 = (v8 & *(_DWORD *)(a1 + 12)) == 0;
  *(_DWORD *)(a1 + 12) &= v8;
  if( v9 )
  {
    *(_DWORD *)(a2 + 40) = 256;
    DefaultPagePriority = MmGetDefaultPagePriority();
    MmSetAccessLogging(1ui64, DefaultPagePriority);
    MmEnablePeriodicAccessClearing(1u);
  }
  if( (_InterlockedExchangeAdd64(v7, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
    ExfTryToWakePushLock(v7);
  KeAbPostRelease((PVOID)v7);
  KeLeaveCriticalRegion();
}

Referenced by:

PfGetCompletedTrace
PfTStart
PfpPowerActionStartScenarioTracing