EtwpReleaseTraceBuffer
VOID __stdcall EtwpReleaseTraceBuffer(_ETW_BUFFER_HANDLE *BufferHandle){
__int64 v1;
signed __int64 *v2;
signed __int64 v3;
signed __int64 v4;
v1 = *(_QWORD *)BufferHandle;
v2 = (signed __int64 *)*((_QWORD *)BufferHandle + 1);
_m_prefetchw(v2);
v3 = *v2;
if( (v1 ^ (unsigned __int64)*v2) >= 0xF )
{
LABEL_4:
_InterlockedDecrement((volatile signed __int32 *)(*(_QWORD *)BufferHandle + 12i64));
}
else
{
while( 1 )
{
v4 = v3;
v3 = _InterlockedCompareExchange64(v2, v3 + 1, v3);
if( v4 == v3 )
break;
if( (v1 ^ (unsigned __int64)v3) >= 0xF )
goto LABEL_4;
}
}
}Referenced by:
EtwTraceEvent
EtwTraceRaw
EtwpEventWriteFull
EtwpFailLogging
EtwpLogContextSwapEvent
EtwpLogSystemEventUnsafe
EtwpTraceMessageVa
EtwpWriteUserEvent