PfGetCompletedTrace
NTSTATUS __stdcall PfGetCompletedTrace(VOID *Buffer, UINT64 BufferSize, INT8 PreviousMode, UINT64 *ReturnSize){
char **v4;
unsigned int v5;
int v6;
_BOOL4 v7;
int v8;
char *v9;
char *v10;
char **v11;
char *v12;
NTSTATUS v13;
unsigned int Length;
Length = BufferSize;
v4 = 0i64;
v5 = 0;
v6 = 1;
while( 1 )
{
ExAcquireFastMutex((PFAST_MUTEX)((char *)&stru_140C4DB30 + 0x2000));
if( !*(&stru_140C4DB30 + 2046) )
break;
*(&stru_140C4DB30 + 2046) = 0;
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C4DB30 + 0x2000));
PfFbBufferListFlushStandby((_SLIST_ENTRY *)&stru_140C4DB30 + 491);
}
v7 = *(&stru_140C4DB30 + 2042) < *(&stru_140C4DB30 + 2043);
v8 = 0;
while( 1 )
{
v9 = (char *)&stru_140C4DB30 + 8176;
if( v8 )
v9 = (char *)&stru_140C4DB30 + 8168;
v10 = (char *)&stru_140C4DB30 + 8152;
if( v8 )
v10 = (char *)&stru_140C4DB30 + 8136;
v11 = *(char ***)v10;
if( *(char **)v10 != v10 )
break;
if( (unsigned int)++v8 >= 2 )
goto LABEL_15;
}
v4 = *(char ***)v10;
v5 = *((_DWORD *)v11 + 6) + 16;
if( v5 > Length )
{
*(_DWORD *)ReturnSize = v5;
v13 = -1073741789;
goto LABEL_20;
}
v12 = *v11;
if( v11[1] != v10 || *((char ***)v12 + 1) != v11 )
__fastfail(3u);
*(_QWORD *)v10 = v12;
*((_QWORD *)v12 + 1) = v10;
--*(_DWORD *)v9;
LABEL_15:
if( !v7 && *(&stru_140C4DB30 + 2042) < *(&stru_140C4DB30 + 2043) )
{
PfTAccessTracingStart((_PFP_TRACING_GLOBALS *)&stru_140C4DB30 + 1908, &PfKernelGlobals, PfpTraceStopTraceListFull);
KeSetEvent((PRKEVENT)PfKernelGlobals.gap10, 0, 0);
}
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C4DB30 + 0x2000));
v6 = 0;
if( v4 )
{
if( PreviousMode )
ProbeForWrite((UINT64)Buffer, Length, 8i64);
*(_OWORD *)Buffer = 0i64;
*(_DWORD *)Buffer = 1048577;
*((_QWORD *)Buffer + 1) = ((KUSER_SHARED_DATA.TickCountMultiplier * HIDWORD(qword_140C50128)) << 8)
+ ((KUSER_SHARED_DATA.TickCountMultiplier * (unsigned __int64)(unsigned int)qword_140C50128) >> 24);
memmove((char *)Buffer + 16, v4 + 2, *((_DWORD *)v4 + 6));
*(_DWORD *)ReturnSize = v5;
PfTFreeTraceDump(v4);
v13 = 0;
}
else
{
v13 = -2147483622;
}
LABEL_20:
if( v6 )
KeReleaseGuardedMutex((PKGUARDED_MUTEX)((char *)&stru_140C4DB30 + 0x2000));
return v13;
}Referenced by:
PfQuerySuperfetchInformation