Программа для очистки com портов

Каждый раз при подключении нового COM устройства или USB устройства (верно для модем, мобильных телефонов, Bluetooth, конвертеров последовательных портов в USB и т.п.), Windows определяет его через механизм Plug-n-Play и назначит ему некий номер COM порта в диапазоне от 1 до 255. При повторном подключении этого же устройств, ему назначается ранее зарезервированный за ним COM порт. Новым устройствам выдается первый незанятый номер COM порта. Не редкость, когда внешние устройства при подключении создают сразу несколько COM портов (в моем случае после подключения адаптер Bluetooth, в системе появилось сразу 10 . новых COM портов).

Ряд приложений (как правило, довольно древних), способны адресовать только двухзначные номера COM портов, отказываясь работать с COM100 и выше. В самых «запущенных» вариантах, такие программы корректно работают только портами с COM1-COM9. Что делать, если подключенное устройство получило высокий номер? Можно ли сбросить нумерацию для зарезервированных COM портов и удалить назначенные порты? Попробуем разобраться на примере Windows 7.

Как правило в свойствах оборудования изменить выданный COM порт на другой не получается, т.к. система пишет, что все «низкие» COM порт уже используются (in use).

Смена номера COM порта для конкретного устройства

В первую очередь стоит попробовать вручную переопределить номер COM порта для определенного COM-устройства. Предположим требуемый COM порт уже занят, и мы хотим его попробовать его освободить.

Приведенная выше методика не всегда позволяет освободить занятый COM порт. В этом случае придется прибегнуть к редактированию реестра.

Сброс привязок COM портов через реестр

Информация об используемых COM портах хранится в ключе реестра CommDB в разделе HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCOM Name Arbiter

    Откройте редактор реестра (regedit) и перейдите в указанную ветку.


Значение параметра ComDB в двоичном формате определяет список COM портов зарезервированных в системе. Каждый бит определяет состояние соответствующего порта (от 1 до 255). К примеру, если нам нужно оставить резервацию только для COM3, hex значение ComDB будет равно 04 (0000 0100)

Удаление несуществующих COM-портов

Операционные системы семейства Microsoft Windows поддерживают до 255 последовательных портов. Каждый из этих COM-портов может быть обнаружен с помощью механизма Plug-n-Play с тем, чтобы в дальнейшем обращение к нему выполнялось по мнемоническому имени с COM1 до COMx. Программное обеспечение знает, что UART, обеспечивающий работу последовательного порта по RS232-протоколу, может быть подключен к одной из шинных аппаратных реализаций: начиная с безнадежно устаревших ISA/PCI до самых современных LPC/PCI Express. Не редкость встретить COM-порт на USB-шине, не говоря уже о том, что его функциональность обязательно встроена в Bluetooth-адаптеры и ряд аналогичных коммуникационных устройств.

Читайте также:  Как настроить каналы на телевизоре хайер

Операционная система остается в неведении относительно последовательных портов в том случае, когда COM-устройство отключено или исчезло из системы (выполнен unplug). На это случай закрепленное за ним мнемоническое имя в Windows сохраняется, а любому новому COM-порту присваивается первое незанятое имя. Этот процесс документируется в реестре с помощью переменной ComDB, которая хранится в разделе COM Name Arbiter.

Битовое поле ComDB устанавливает флаги (т.е. записывает единицы с соответствующие биты) в тех случаях, когда система задействует тот или иной COM-порт. Так, если у нас есть плата с двумя COM-портами, реализованными силами встроенного SIO-контроллера, переменная ComDB будет равна 03 00… Это означает, что мнемоническое имя COM1 (бит 0) и COM2 (бит 1) заняты. Появление в системе, например, еще одного двухпортового устройства вызовет к жизни COM3 и COM4:


Рис 1. Дополнительные порты COM3 и COM4 в диспетчере устройств

ComDB станет равна 0f 00… И процесс может продолжаться до исчерпания ресурсов системы:


Рис 2. Значение переменной ComDB в COM_Name_Arbiter для COM3/COM4

Как удалить несуществующие COM-порты?

Казалось бы, для того чтобы избавиться от всех последовательных портов, можно отредактировать реестр так, что переменная ComDB будет равна 03 или нулю (в качестве эксперимента по абсолютному удалению COM-портов). Действительно, в операционной системе Windows XP этого было достаточно для приведения ситуации с последовательными портами в исходное состояние. При этом дополнительные COM-порты автоматически обнаруживаются системой. Им присваиваются «правильные» мнемонические имена.

Начиная с Windows Vista ситуация с управлением последовательными портами несколько изменилась. По-прежнему поддерживается битовое поле ComDB, отображающее использование мнемонических имен, но его обнуление уже не дает желаемого эффекта.

Как подчистить COM-порты в Windows 7?

Для того чтобы получить доступ к скрытым последовательным портам в «семерке» нужно выполнить ряд несложных процедур. Перво-наперво требуется в списке переменных среды установить значение системного параметра DevMgr_Show_NonPresent_Devices=1. Если его там нет, следует просто добавить указанное имя.

Читайте также:  Что делать если корень не извлекается


Рис 3. Добавление новой переменной среды Windows позволит управлять COM-портами

Это позволит в «Диспетчере устройств» показать скрытые устройства, а значит — и удалить неиспользуемые:


Рис 4. Доступ к несуществующим COM-портам

Их легко отличить от существующих в данный момент COM-портов: они отображаются бледным цветом:


Рис 5. Управление неиспользуемыми COM-портами

Так можно распрощаться со всеми девайсами, которые когда-то были обнаружены Windows, но сейчас не подключены к системе. Не стоит забывать, что управление свободными мнемоническими именами по-прежнему делегировано переменной ComDB, в чем можно убедиться, заглянув в системный реестр.

Как очистить используемые COM-порты?

номера COM-портов всегда кажутся занятыми чем-то, и хотя сейчас у меня есть только 4 последовательных порта (3 через Bluetooth и один USB для RS-232), у меня есть множество COM-портов, установленных как в использовании. Я бы хотел немного почистить этот список.

также мне кажется, что время от времени один из взятых COM-портов освобождается, а затем одно из устройств, которые я использую, возьмет этот номер, создавая путаницу, с тех пор, как я должен буду пойти и охотиться его номер com в диспетчере устройств.

Ну я просто очистил бесчисленное множество USB-устройств, которые когда-то были подключены к компьютеру с помощью USBDeview и до сих пор проблема остается.

9 ответов

запустить Диспетчер устройств из командной строки:

включить "Показать скрытые устройства" в меню и удалить серым из COM-портов.

  1. Нажмите Пуск → Выполнить → тип regedit и нажмите кнопку OK
  2. перейти к HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlCOM Name Arbiter
  3. теперь на правой панели, вы можете увидеть ключ ComDB . Щелкните правой кнопкой мыши и выберите Изменить
  4. в разделе значение данных выберите все и удалите сброс к нулю ( 0 )
    Свои 32 байта с 8 битами в каждом байте в шестнадцатиричном представлении. Немного значение 1 означает номер порта (1. 256) зарезервировано. Первые 8 портов находятся в двух крайних левых шестнадцатеричных значениях, биты возрастают от самого низкого до самого высокого справа налево, следующие 8 портов находятся во вторых двух и так далее: hex F3 24 будет бинарные 1111 0011 0010 0100 , что означает, что используются следующие порты: 1, 2, 5, 6, 7, 8 ( 1111 0011) и 11, 14 ( 0010 0100) .
  5. закройте редактор реестра и перезагрузите компьютер. Если задать значение 0 все COM-порты бесплатный.
Читайте также:  Ремонт часов в домашних условиях

может потребоваться переустановка любого USB-последовательного преобразователя.

Спасибо за все советы выше. Я написал программное обеспечение для автоматической очистки реестра, но хотя он сделал настроить аппаратные средства, программное обеспечение, и арбитр разделы он не удалил записи фантомный COM-порт. Даже перезагрузка с удаленным устройством "USB to 2serial Port" не очистила систему должным образом.

впрочем, инструкции на это PDF не работает правильно:

для Win7, я отрегулировал инструкции немного на этом PDF к be:

  1. нажмите Пуск / (правый клик:) Компьютер / Свойства / Дополнительные Системные настройки (не Диспетчер устройств)
  2. Нажмите Кнопку Переменные Среды
  3. Нажмите в системных переменных (нижняя часть) нажмите кнопку Создать
  4. введите имя переменной: DEVMGR_SHOW_NONPRESENT_DEVICES
    Введите Значение Переменной: 1
  5. нажмите OK (выход из окружения)

нажмите OK (выход из системы Properties)

Нажмите Кнопку "Пуск". В поле команда введите команду управление Откроется окно Управление компьютером .

  • Нажмите Диспетчер Устройств
  • нажмите Вид и выберите Показать скрытые устройства
  • выберите порты (COM & LPT)
    Теперь появляются все порты, real (черный текст) и phantom (серый текст).
  • один за другим, щелкните правой кнопкой мыши фантомные порты, и выберите Удалить
  • этот теперь следовало убрать из системы ненужные порты USB на Фантом.

    Примечание: после очистки всех моих фантомных портов, оставив только "COM1", я нахожу мой реестр показывает:

    и щелчок правой кнопкой мыши на компьютере / свойствах / Диспетчере устройств / портах показывает только COM1. Щелкните правой кнопкой мыши на COM1 / свойства / параметры порта / дополнительно показывает порт COM1 порт com2 с "использованием" и COM3 "в использовании". Все остальные настройки до 7, которые раньше были "в использовании", теперь освобождены. Так только Настройка "арбитр", похоже, говорит системе Win7, что действительно"используется". Компьютерная система управления очистила арбитра, но не очистила раздел программного обеспечения.