Статья

Очистка занятых COM портов

7 Апр , 2016,
No Comments

При присоединении абсолютно нового COM устройства или USB устройства, Windows обнаруживает благодаря Plug-n-Play и присваивает ему номер COM порта в диапазоне от 1 до 255. Если же вы подключаете устройство еще раз, ему прикрепляется тот же, зарезервированный за ним ранее COM порт. Если же вы подключаете еще одно новое устройство, то ему назначается другой незанятый номер COM порта.

Некоторые программы (чаще старые), способны работать только на двухзначных номерах COM портов, и не работают с COM100 и более. Некоторые очень древние программы  работают только портами с COM1-COM9. Как поступить, если устройство получило не нужный COM порт? Можно ли удалить номер зарезервированного COM порта?

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

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

  1. Запустим диспетчер устройств (Device Manager) таким образом:set devmgr_show_nonpresent_devices=1
    start devmgmt.msc
  2. В меню консоли выберем View->Show Hidden Devices.
  3. Разверните ветку Ports (COM & LPT) и в списке найдите устройство, которому назначен нужный COM порт (бледная иконка означает, что данный COM порт назначен, но в настоящий момент это устройство не подключено). Щелкните по нему ПКМ и выберите Uninstall
  4. Освобожденный COM порт может быть назначен другому устройству. Найдите в этой же ветке свое устройство, откройте окно его свойств (Properties). Затем перейдите на вкладку Port Settings и нажмите кнопку Advanced. В выпадающем списке выберите неиспользуемый COM порт.

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

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

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

  1. Откройте редактор реестра (regedit) и перейдите в указанную ветку.
    Важно! Настоятельно рекомендуем предварительно создать резервную копию данной ветки реестра (File -> Export). В том случае, если что-то пойдет не так, вы сможете вернуться к первоначальной конфигурации портов.
  2. Значение параметра ComDB в двоичном формате определяет список COM портов зарезервированных в системе. Каждый бит определяет состояние соответствующего порта (от 1 до 255). К примеру, если нам нужно оставить резервацию только для COM3, hex значение ComDB будет равно 04 (0000 0100)
    Важно! Будьте предельно внимательными, ни в коем случае не добавьте в этот параметр дополнительные байт, иначе система может начать падать в BSOD.
  3. Если нужно полностью сбросить все привязки COM, измените значение ключа ComDB на 0.
    Примечание. В разделе HKEY_LOCAL_MACHINE\HARDWARE\DEVICEMAP\SERIALCOMM можно увидеться список COM портов, подключенных к системе.
  4. В ветке HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Portsсодержится список назначенных COM портов. Все ненужные порты можно удалить (в нашем примере мы оставим только COM3 и удалим остальные.
  5. Отключите все оборудование и перезагрузите ПК.
  6. После перезагрузки включите оборудование в нужном порядке (переустановите конверторы USB-to-serial и т.д.). Все обнаруженные COM-порты автоматически определяться системой и им будут последовательно выделены номера COM портов.