VslpSkStartProfiling
INT64 __fastcall VslpSkStartProfiling(UINT16 *a1){
INT64 result;
unsigned int v3;
unsigned int v4;
unsigned __int64 v5;
unsigned int v6;
void *PoolWithTag;
unsigned int *v8;
int v9;
UINT64 v10;
INT64 v11[2];
__int128 v12;
*(_OWORD *)v11 = 0i64;
v12 = 0i64;
result = WmiQueryTraceInformation(TraceSessionSettingsClass, v11, 0x20ui64, &v10, a1);
if( (int)result >= 0 )
{
v3 = HIDWORD(v11[1]);
v4 = HIDWORD(v11[0]);
v5 = ((unsigned __int64)HIDWORD(v11[1]) + 63) >> 6;
if( HIDWORD(v11[0]) > 0x48 )
{
if( DWORD1(v12) )
VslpFlushTimerInterval = DWORD1(v12);
v6 = 16 * (((unsigned __int64)HIDWORD(v11[1]) + 63) >> 6) + HIDWORD(v11[1]) * HIDWORD(v11[0]) + 24;
PoolWithTag = ExAllocatePoolWithTag(NonPagedPoolNx, v6, 0x54736D56ui64);
VslpEventLog = PoolWithTag;
v8 = (unsigned int *)PoolWithTag;
if( PoolWithTag )
{
memset((INT64)PoolWithTag, 0i64);
v8[2] = v5;
v8[1] = v4;
v8[3] = v6;
*v8 = v3;
memset((INT64)(v8 + 6), 255i64);
memset((INT64)&v8[2 * v8[2] + 6], 0i64);
VslpLoggerId = (UINT64 *)*a1;
VslpSkCreateBuffers(v4, v3);
ExInitializePushLock((EX_RUNDOWN_REF *)&VslpBufferFlushRundown);
v9 = VslpSkMapBuffers();
if( v9 >= 0 )
{
KeInitializeTimerEx((PKTIMER)VslpFlushTimer, NotificationTimer);
KeInitializeDpc(&VslpFlushDpc, VslpSkFlushBufferCallback, 0i64);
KiSetTimerEx(
(_KTIMER *)VslpFlushTimer,
(_LARGE_INTEGER)(-10000000i64 * (unsigned int)VslpFlushTimerInterval),
0i64,
0,
&VslpFlushDpc);
}
else
{
ExFreePoolWithTag(VslpEventLog, 0x54736D56u);
VslpEventLog = 0i64;
VslpLoggerId = 0i64;
}
return(unsigned int)v9;
}
else
{
return 3221225626i64;
}
}
else
{
return 3221225485i64;
}
}
return result;
}Referenced by:
VslpEtwClassicCallback