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