EtwpFailLogging
VOID __fastcall EtwpFailLogging(
UINT8 a1,
INT64 a2,
INT64 a3,
INT64 a4,
UINT8 a5,
INT64 Status,
EVENT_DESCRIPTOR *EventDescriptor,
CHAR a8){
__int64 v9;
UINT8 v10;
__int64 v13;
unsigned int *v14;
UINT8 v15;
bool i;
__int64 v17;
EVENT_DESCRIPTOR *v18;
__int64 v19;
__int64 v20;
__int64 v21;
INT64 v22;
EVENT_DESCRIPTOR *v23;
UNICODE_STRING *v24;
INT64 v25;
v9 = *(_QWORD *)(a3 + 392);
v10 = a1;
if( *(_DWORD *)(a4 + 384) )
{
v13 = 0i64;
do
{
v14 = *(unsigned int **)(a4 + 48 * v13);
if( (v14[3] & 0x8000000) == 0 )
{
**(_DWORD **)(a4 + 48 * v13 + 8) = v14[7] | **(_DWORD **)(a4 + 48 * v13 + 8) & v14[8];
EtwpUpdateEventsLostCount((INT64)v14);
if( EtwEventEnabled(EtwpEventTracingProvRegHandle, (EVENT_DESCRIPTOR *)&ETW_EVENT_LOST_EVENT, v18) )
EtwpTraceLostEvent(
(GUID *)(a3 + 40),
EventDescriptor,
(UNICODE_STRING *)(v14 + 38),
(unsigned int)Status,
v24,
v25);
}
EtwpReleaseTraceBuffer((INT64 *)(a4 + 16 + 48 * v13));
if( a8 )
ExReleaseRundownProtectionCacheAwareEx(
*(PEX_RUNDOWN_REF_CACHE_AWARE *)(*(_QWORD *)(v9 + 448) + 8i64 * *v14),
1u);
v13 = (unsigned int)(v13 + 1);
}
while( (unsigned int)v13 < *(_DWORD *)(a4 + 384) );
v10 = a1;
}
v15 = a5;
for( i = !_BitScanForward((unsigned int *)&v17, a5); !i; i = !_BitScanForward((unsigned int *)&v17, v15) )
{
v15 &= v15 - 1;
if( EtwpLevelKeywordEnabled(a3 + 32 * (v17 + 4), v10, a2) )
{
v20 = *(unsigned __int16 *)(v19 + 6);
v21 = v20;
if( !a8
|| ExAcquireRundownProtectionCacheAwareEx(*(PEX_RUNDOWN_REF_CACHE_AWARE *)(*(_QWORD *)(v9 + 448) + 8 * v20), 1u) )
{
if( (unsigned int)v20 >= *(_DWORD *)(v9 + 16) )
v22 = 1i64;
else
v22 = *(_QWORD *)(*(_QWORD *)(v9 + 456) + 8 * v20);
if( (v22 & 1) == 0 )
{
EtwpUpdateEventsLostCount(v22);
if( EtwEventEnabled(EtwpEventTracingProvRegHandle, (EVENT_DESCRIPTOR *)&ETW_EVENT_LOST_EVENT, v23) )
EtwpTraceLostEvent(
(GUID *)(a3 + 40),
EventDescriptor,
(UNICODE_STRING *)(v22 + 152),
(unsigned int)Status,
v24,
v25);
}
if( a8 )
ExReleaseRundownProtectionCacheAwareEx(*(PEX_RUNDOWN_REF_CACHE_AWARE *)(*(_QWORD *)(v9 + 448) + 8 * v21), 1u);
}
}
v10 = a1;
}
}Referenced by:
EtwpEventWriteFull
EtwpWriteUserEvent