EtwpFailLogging
void __fastcall EtwpFailLogging(
UINT8 a1,
UINT64 a2,
__int64 a3,
__int64 a4,
unsigned __int8 a5,
int a6,
__int16 *a7,
char a8){
__int64 v9;
UINT8 v10;
__int64 v13;
_WMI_LOGGER_CONTEXT *v14;
unsigned __int8 v15;
bool i;
__int64 v17;
__int64 v18;
__int64 v19;
__int64 v20;
__int64 v21;
v9 = *(_QWORD *)(a3 + 392);
v10 = a1;
if( *(_DWORD *)(a4 + 384) )
{
v13 = 0i64;
do
{
v14 = *(_WMI_LOGGER_CONTEXT **)(a4 + 48 * v13);
if( (v14->LoggerMode & 0x8000000) == 0 )
{
**(_DWORD **)(a4 + 48 * v13 + 8) = v14->ErrorMarker | **(_DWORD **)(a4 + 48 * v13 + 8) & v14->SizeMask;
EtwpUpdateEventsLostCount(v14);
if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_LOST_EVENT) )
EtwpTraceLostEvent((_QWORD *)(a3 + 40), a7, &v14->LoggerName.Length, a6);
}
EtwpReleaseTraceBuffer((_ETW_BUFFER_HANDLE *)(a4 + 16 + 48 * v13));
if( a8 )
ExReleaseRundownProtectionCacheAwareEx(*(_QWORD *)(*(_QWORD *)(v9 + 448) + 8i64 * v14->LoggerId), 1i64);
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((_TRACE_ENABLE_INFO *)(a3 + 32 * (v17 + 4)), v10, a2) )
{
v19 = *(unsigned __int16 *)(v18 + 6);
v20 = v19;
if( !a8 || ExAcquireRundownProtectionCacheAwareEx(*(_QWORD *)(*(_QWORD *)(v9 + 448) + 8 * v19), 1i64) )
{
if( (unsigned int)v19 >= *(_DWORD *)(v9 + 16) )
v21 = 1i64;
else
v21 = *(_QWORD *)(*(_QWORD *)(v9 + 456) + 8 * v19);
if( (v21 & 1) == 0 )
{
EtwpUpdateEventsLostCount((_WMI_LOGGER_CONTEXT *)v21);
if( EtwEventEnabled(*(&ExBootDevicesRemovedEvent + 241), &ETW_EVENT_LOST_EVENT) )
EtwpTraceLostEvent((_QWORD *)(a3 + 40), a7, (unsigned __int16 *)(v21 + 152), a6);
}
if( a8 )
ExReleaseRundownProtectionCacheAwareEx(*(_QWORD *)(*(_QWORD *)(v9 + 448) + 8 * v20), 1i64);
}
}
v10 = a1;
}
}Referenced by:
EtwpEventWriteFull
EtwpWriteUserEvent