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