EtwpFindAndLockBufferForFlushing
_WMI_BUFFER_HEADER *__fastcall EtwpFindAndLockBufferForFlushing(
_WMI_LOGGER_CONTEXT *LoggerContext,
INT64 SequenceNumber){
char *v2;
__int64 v3;
bool v4;
char *v5;
char *v6;
v2 = (char *)LoggerContext + 96;
v3 = *((_QWORD *)LoggerContext + 12);
v4 = v3 == (_QWORD)LoggerContext + 96;
v5 = (char *)(v3 - 56);
if( v4 )
v5 = 0i64;
if( !v5 )
return(_WMI_BUFFER_HEADER *)v5;
while( *((_QWORD *)v5 + 3) != SequenceNumber )
{
v6 = (char *)*((_QWORD *)v5 + 7);
v5 = v6 - 56;
if( v6 == v2 )
v5 = 0i64;
if( !v5 )
return 0i64;
}
if( _InterlockedCompareExchange((volatile signed __int32 *)v5 + 11, 3, 0) )
return 0i64;
if( *((_QWORD *)v5 + 3) == SequenceNumber )
return(_WMI_BUFFER_HEADER *)v5;
_InterlockedExchange((volatile __int32 *)v5 + 11, 0);
return 0i64;
}Referenced by:
EtwpBufferingModeFlush