Очищення зайнятих COM портів

  1. Зміна номера COM порту для конкретного пристрою
  2. Скидання прив'язок 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 порт вже використовуються (in use)

Зміна номера 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.
  4. У гілці HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ Windows NT \ CurrentVersion \ Ports міститься список призначених COM портів. Всі непотрібні порти можна видалити (в нашому прикладі ми залишимо тільки COM3 і видалимо інші.
  5. Вимкніть все обладнання і перезавантажте ПК.
  6. Після перезавантаження включите обладнання в потрібному порядку (переустановите конвертори USB-to-serial і т.д.). Всі виявлені COM-порти автоматично визначатися системою і їм будуть послідовно виділені номери COM портів.

9. Що робити, якщо підключений пристрій одержав високий номер?
Чи можна скинути нумерацію для зарезервованих COM портів і видалити призначені порти?