/// <summary>
        /// Конструктор WinCountersWorkingInfo
        /// </summary>
        /// <param name="instMode">Режим работы</param>
        /// <param name="machineName">Имя машины</param>
        /// <param name="readOnlyCounters">Счётчики только для чтения</param>
        /// <param name="prefer64bitCounters">Предпочтение 64-ёх битным счётчикам</param>
        /// <param name="existedInstancesTreatment">Как обрабатывать существующие в Windows инстансы</param>
        public WinCountersWorkingInfo(WinCountersInstantiationMode instMode, string machineName, bool readOnlyCounters, bool prefer64bitCounters, WinCountersExistedInstancesTreatment existedInstancesTreatment)
        {
            InstantiationMode         = instMode;
            MachineName               = string.IsNullOrEmpty(machineName) ? "." : machineName;
            IsLocalMachine            = MachineName == ".";
            ReadOnlyCounters          = readOnlyCounters;
            Prefer64BitCounters       = prefer64bitCounters;
            ExistedInstancesTreatment = existedInstancesTreatment;

            if (!IsLocalMachine)
            {
                if (instMode != WinCountersInstantiationMode.UseOnlyExisted)
                {
                    throw new ArgumentException("Counters on remote machine can be used only in UseOnlyExisted mode");
                }
                if (!readOnlyCounters)
                {
                    throw new ArgumentException("Counters on remote machine should be in ReadOnly mode");
                }
            }
        }
        /// <summary>
        /// Конструктор WinCounterFactory
        /// </summary>
        /// <param name="instMode">Режим работы</param>
        /// <param name="namePrefix">Префикс имени категории</param>
        /// <param name="machineName">Имя машины (null или '.' для локальной)</param>
        /// <param name="readOnlyCounters">Счётчики только для чтения</param>
        /// <param name="preferedBitness">Предпочитать ли 64 битные счётчики</param>
        /// <param name="existedInstancesTreatment">Как обрабатывать существующие в Windows инстансы</param>
        public WinCounterFactory(WinCountersInstantiationMode instMode, string namePrefix, string machineName, bool readOnlyCounters, WinCountersPreferedBitness preferedBitness, WinCountersExistedInstancesTreatment existedInstancesTreatment)
        {
            bool prefer64BitCounters = Environment.Is64BitOperatingSystem;

            if (preferedBitness == WinCountersPreferedBitness.Prefer32BitCounters)
            {
                prefer64BitCounters = false;
            }
            else if (preferedBitness == WinCountersPreferedBitness.Prefer64BitCounters)
            {
                prefer64BitCounters = true;
            }

            _info       = new WinCountersWorkingInfo(instMode, machineName, readOnlyCounters, prefer64BitCounters, existedInstancesTreatment);
            _namePrefix = namePrefix != null?namePrefix.TrimEnd('.') : "";

            _state           = WinCategoryState.Created;
            _childCategories = new List <Category>();
        }