PfTAccessTracingCleanup
VOID __stdcall PfTAccessTracingCleanup(
_PFP_TRACING_GLOBALS *TGlobals,
_PF_KERNEL_GLOBALS *KGlobals,
_PFP_TRACE_STOP_REASONS StopReason){
_ETHREAD *CurrentThread;
bool v6;
_EX_PUSH_LOCK *v7;
unsigned int DefaultPagePriority;
_QWORD *v9;
_QWORD *v10;
VOID *v11;
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
v6 = StopReason == PfpTraceStopSuspend;
--CurrentThread->Tcb.KernelApcDisable;
v7 = (_EX_PUSH_LOCK *)(TGlobals + 4);
ExAcquirePushLockExclusiveEx((_EX_PUSH_LOCK *)TGlobals + 2, 0i64);
TGlobals[3] |= StopReason;
DefaultPagePriority = MmGetDefaultPagePriority();
MmSetAccessLogging(0i64, DefaultPagePriority);
PfKernelGlobals.AccessBufferMax = 0;
ExWaitForRundownProtectionRelease(&PfKernelGlobals.AccessBufferRef);
RtlpInterlockedFlushSList();
v10 = v9;
while( v10 )
{
v11 = v10;
v10 = (_QWORD *)*v10;
MmFreeAccessPfnBuffer(v11, v6);
}
MmEnablePeriodicAccessClearing(0);
PfTAccessTracingInitialize(TGlobals, &PfKernelGlobals, 1ui64);
if( (_InterlockedExchangeAdd64(&v7->_bf_0, 0xFFFFFFFFFFFFFFFFui64) & 6) == 2 )
ExfTryToWakePushLock(v7);
KeAbPostRelease(v7);
KeLeaveCriticalRegion();
}Referenced by:
PfTCleanup
PfTTraceListAdd
PfpPowerActionStartScenarioTracing