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