PfTCleanup
VOID __stdcall PfTCleanup(_PFP_TRACING_GLOBALS *TGlobals){
_PF_KERNEL_GLOBALS *v1;
char v3;
_PF_KERNEL_GLOBALS *v4;
_QWORD *v5;
_QWORD *v6;
_DWORD *v7;
_ADAPTER_OBJECT *v8;
INT64 a5;
_LIST_ENTRY FreeList[2];
FreeList[0].Blink = FreeList;
v3 = 0;
FreeList[0].Flink = FreeList;
if( KeGetCurrentThread() == *((struct _KTHREAD **)TGlobals + 13) )
v3 = 1;
PfTAccessTracingCleanup(TGlobals, v1, PfpTraceStopPfNotStarted);
ExAcquireFastMutex((PFAST_MUTEX)TGlobals + 10);
TGlobals[135] = 0;
TGlobals[137] = 0;
PfTTraceListTrim(PfTraceTypePageAccess, 0i64, FreeList);
PfTTraceListTrim(PfTraceTypeNameLogging, 0i64, FreeList);
TGlobals[138] = 0;
PfTAccessTracingCleanup(TGlobals, v4, PfpTraceStopTraceListFull);
KeReleaseGuardedMutex((PKGUARDED_MUTEX)TGlobals + 10);
PfTTraceListFree(FreeList);
TGlobals[124] = 0;
RtlpInterlockedFlushSList();
v6 = v5;
while( v6 )
{
v7 = v6;
LODWORD(a5) = 1;
v6 = (_QWORD *)*v6;
PfFbBufferListInsertInFree(
(_EX_RUNDOWN_REF *)TGlobals + 44,
v7,
(unsigned int)(v7[8] - (_DWORD)v7),
(unsigned int)v7[11],
a5);
}
PfFbBufferListShutdown(TGlobals + 56);
PfFbBufferListShutdown(TGlobals + 88);
if( !v3 && *((_QWORD *)TGlobals + 13) )
{
KeSetEvent((PRKEVENT)(TGlobals + 50), 0, 0);
KeWaitForSingleObject(*((_QWORD *)TGlobals + 13), 0, 0, 0, 0i64);
HalPutDmaAdapter(*((PADAPTER_OBJECT *)TGlobals + 13));
*((_QWORD *)TGlobals + 13) = 0i64;
}
PfTCleanupBuffers((_PFP_BUFFER_MANAGER *)&stru_140C4DB30 + 319);
PfTCleanupBuffers((_PFP_BUFFER_MANAGER *)((char *)&stru_140C4DB30 + 7696));
PfFbBufferListCleanup(TGlobals + 56);
PfFbBufferListCleanup(TGlobals + 88);
v8 = (_ADAPTER_OBJECT *)*((_QWORD *)TGlobals + 77);
if( v8 )
{
HalPutDmaAdapter(v8);
*((_QWORD *)TGlobals + 77) = 0i64;
}
TGlobals[2] = 0;
}Referenced by:
PfSetSuperfetchInformation
PfTStart
PfpParametersPropagate