EtwpPrepareDirtyBuffer
VOID __stdcall EtwpPrepareDirtyBuffer(VOID *LoggerContext, _WMI_BUFFER_HEADER *Buffer){
int v2;
v2 = *((_DWORD *)LoggerContext + 3);
if( (v2 & 0x400) != 0 )
{
if( (v2 & 0x4000000) != 0 )
{
EtwpEnqueueAvailableBuffer((_WMI_LOGGER_CONTEXT *)LoggerContext, Buffer, EtwBufferStatePendingCompression);
if( !*((_DWORD *)LoggerContext + 288)
&& *((_QWORD *)LoggerContext + 156) >= 2i64 * *((_QWORD *)LoggerContext + 157) )
{
EtwpReenableCompression((_WMI_LOGGER_CONTEXT *)LoggerContext);
}
if( *((_DWORD *)LoggerContext + 288) && !_InterlockedExchange((volatile __int32 *)LoggerContext + 280, 2) )
{
if( ObGetCurrentIrql() > 2u )
KeInsertQueueDpc((UINT64)LoggerContext + 1176, 0i64, 0i64);
else
EtwpCompressionDpc(0i64, LoggerContext, 0i64, 0i64);
}
}
else
{
EtwpEnqueueAvailableBuffer((_WMI_LOGGER_CONTEXT *)LoggerContext, Buffer, EtwBufferStateFree);
}
}
else
{
*((_DWORD *)Buffer + 11) = 3;
*((_LARGE_INTEGER *)Buffer + 2) = EtwpGetLoggerTimeStamp((INT64)LoggerContext);
}
}Referenced by:
EtwpBufferingModeFlush
EtwpFlushActiveBuffers
EtwpSwitchBuffer