EtwpPrepareDirtyBuffer
VOID __stdcall EtwpPrepareDirtyBuffer(PSTR DeferredContext, INT64 a2){
int v2;
v2 = *((_DWORD *)DeferredContext + 3);
if( (v2 & 0x400) != 0 )
{
if( (v2 & 0x4000000) != 0 )
{
EtwpEnqueueAvailableBuffer((INT64)DeferredContext, (UINT64 *)a2, 4ui64);
if( !*((_DWORD *)DeferredContext + 288)
&& *((_QWORD *)DeferredContext + 156) >= 2i64 * *((_QWORD *)DeferredContext + 157) )
{
EtwpReenableCompression((INT64)DeferredContext);
}
if( *((_DWORD *)DeferredContext + 288) && !_InterlockedExchange((volatile __int32 *)DeferredContext + 280, 2) )
{
if( ObGetCurrentIrql() > 2u )
KeInsertQueueDpc((PRKDPC)(DeferredContext + 1176), 0i64, 0i64);
else
EtwpCompressionDpc(0i64, DeferredContext, 0i64, 0i64);
}
}
else
{
EtwpEnqueueAvailableBuffer((INT64)DeferredContext, (UINT64 *)a2, 0i64);
}
}
else
{
*(_DWORD *)(a2 + 44) = 3;
*(LARGE_INTEGER *)(a2 + 16) = EtwpGetLoggerTimeStamp((INT64)DeferredContext);
}
}Referenced by:
EtwpBufferingModeFlush
EtwpFlushActiveBuffers
EtwpSwitchBuffer