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