EtwpLogPmcCounterRundown
VOID __stdcall EtwpLogPmcCounterRundown(_WMI_LOGGER_CONTEXT *LoggerContext, UINT64 TargetLoggerId){
unsigned int v2;
VOID **PoolWithTag;
VOID **v5;
VOID **v6;
_ETW_PMC_SUPPORT *PmcData;
unsigned int v8;
unsigned int v9;
__int64 v10;
VOID **v11;
const wchar_t *v12;
__int64 v13;
__int64 v14;
unsigned int CountersCount;
int v16;
v2 = TargetLoggerId;
v16 = 0;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, (unsigned int)(16 * (EtwpMaxPmcCounter + 1)), 1953985605i64);
if( PoolWithTag )
{
v5 = ExAllocatePoolWithTag(0x200ui64, (unsigned int)(24 * EtwpMaxPmcCounter), 1953985605i64);
if( v5 )
{
PmcData = LoggerContext->PmcData;
if( !PmcData->CountersCount )
return;
v8 = 0;
CountersCount = PmcData->CountersCount;
*PoolWithTag = &CountersCount;
PoolWithTag[1] = (VOID *)4;
v9 = CountersCount;
if( CountersCount )
{
do
{
v16 = 0;
v10 = v8;
v11 = &v5[3 * v8];
*(_DWORD *)v11 = PmcData->Source[v8];
if( ((int(__fastcall *)(__int64, __int64, VOID **, int *))off_140C00A68[0])(1i64, 24i64, v11, &v16) < 0 )
v12 = L"Unknown";
else
v12 = (const wchar_t *)v11[2];
v13 = -1i64;
do
++v13;
while( v12[v13] );
++v8;
v14 = 2 * (v10 + 1);
PoolWithTag[v14] = (VOID *)v12;
PoolWithTag[v14 + 1] = (VOID *)(unsigned int)(2 * v13 + 2);
v9 = CountersCount;
}
while( v8 < CountersCount );
}
EtwpLogKernelEvent((__int64)PoolWithTag, (_ETW_SILODRIVERSTATE *)EtwpHostSiloState, v2, v9 + 1, 0xF30u, 0x401802u);
ExFreePoolWithTag(PoolWithTag, 0);
v6 = v5;
}
else
{
v6 = PoolWithTag;
}
ExFreePoolWithTag(v6, 0);
}
}Referenced by:
EtwpCheckLoggerAccessAndDoRundown
EtwpStopLoggerInstance