EtwpAllocateTraceBufferPool

NTSTATUS __stdcall EtwpAllocateTraceBufferPool(_WMI_LOGGER_CONTEXT *LoggerContext){
  unsigned int SystemMaximumBufferCount; 
  int v3; 
  unsigned int MinimumBuffers; 
  unsigned int LoggerMode; 
  unsigned int v6; 
  unsigned int v7; 
  unsigned int MaximumBuffers; 
  unsigned int FlushThreshold; 
  unsigned int v11; 

  EtwpQueryUsedProcessorCount(LoggerContext);
  SystemMaximumBufferCount = EtwpGetSystemMaximumBufferCount(LoggerContext);
  MinimumBuffers = LoggerContext->MinimumBuffers;
  LoggerMode = LoggerContext->LoggerMode;
  v6 = 2 * v3 + 4;
  if( (LoggerMode & 0x4000000) == 0 )
    v6 = 2 * v3;
  v7 = v6;
  if( SystemMaximumBufferCount >= v6 )
    v7 = SystemMaximumBufferCount;
  MaximumBuffers = LoggerContext->MaximumBuffers;
  if( MaximumBuffers <= v6 )
    MaximumBuffers = v6;
  if( MaximumBuffers >= v7 )
    MaximumBuffers = v7;
  LoggerContext->MaximumBuffers = MaximumBuffers;
  if( MinimumBuffers <= v6 )
    MinimumBuffers = v6;
  if( MinimumBuffers >= v7 )
    MinimumBuffers = v7;
  LoggerContext->MinimumBuffers = MinimumBuffers;
  if( MinimumBuffers > MaximumBuffers )
  {
    LoggerContext->MaximumBuffers = MinimumBuffers;
    MaximumBuffers = MinimumBuffers;
  }
  if( (LoggerMode & 0x400) != 0 )
  {
    MaximumBuffers = MinimumBuffers;
    LoggerContext->MaximumBuffers = MinimumBuffers;
  }
  if( (LoggerMode & 0x40000) != 0 )
    return 0;
  FlushThreshold = LoggerContext->FlushThreshold;
  if( FlushThreshold )
  {
    v11 = MaximumBuffers - v3 - 1;
    if( FlushThreshold > v11 )
      LoggerContext->FlushThreshold = v11;
  }
  if( (unsigned int)EtwpAllocateFreeBuffers(LoggerContext, MinimumBuffers) >= MinimumBuffers )
    return 0;
  else
    return -1073741801;
}

Referenced by:

EtwpStartLogger