PfTTraceListAdd
void __fastcall PfTTraceListAdd(__int64 a1){
UINT64 v2;
_BOOL4 v3;
char *v4;
char *v5;
__int64 *v6;
_LIST_ENTRY FreeList;
FreeList.Blink = &FreeList;
FreeList.Flink = &FreeList;
ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C4DB30 + 0x2000));
v2 = *(&stru_140C4DB30 + 2043);
v3 = *(&stru_140C4DB30 + 2042) < *(&stru_140C4DB30 + 2043);
if( *(_DWORD *)(a1 + 28) == 1 )
{
v5 = (char *)&stru_140C4DB30 + 8152;
v2 = *(&stru_140C4DB30 + 2045);
v4 = (char *)&stru_140C4DB30 + 8176;
if( *(&stru_140C4DB30 + 2044) + 1 == *(&stru_140C4DB30 + 2045) )
++HIDWORD(xmmword_140C4FC10);
}
else
{
v4 = (char *)&stru_140C4DB30 + 8168;
v5 = (char *)&stru_140C4DB30 + 8136;
if( *(&stru_140C4DB30 + 2042) + 1 == *(&stru_140C4DB30 + 2043) )
++DWORD2(xmmword_140C4FC10);
*(&stru_140C4DB30 + 2046) = 1;
}
v6 = (__int64 *)*((_QWORD *)v5 + 1);
if( (char *)*v6 != v5 )
__fastfail(3u);
*(_QWORD *)a1 = v5;
*(_QWORD *)(a1 + 8) = v6;
*v6 = a1;
*((_QWORD *)v5 + 1) = a1;
if( ++*(_DWORD *)v4 > (unsigned int)v2 )
PfTTraceListTrim(*(PF_TRACE_TYPE *)(a1 + 28), v2, &FreeList);
if( v5 == (char *)&stru_140C4DB30 + 8136 && *(char **)v5 == v5 )
*(&stru_140C4DB30 + 2046) = 0;
if( v3 && *(&stru_140C4DB30 + 2042) >= *(&stru_140C4DB30 + 2043) )
PfTAccessTracingCleanup(
(_PFP_TRACING_GLOBALS *)&stru_140C4DB30 + 1908,
(_PF_KERNEL_GLOBALS *)v2,
PfpTraceStopTraceListFull);
KeSetEvent(Event, 0, 0);
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C4DB30 + 0x2000));
PfTTraceListFree(&FreeList);
}Referenced by:
PfTGenerateTrace
PfpSectInfoHandleFullBuffer