Изменение номера COM-портов / Отображение скрытых устройств

Число просмотров: 79 244 

Столкнулся тут недавно с тем, что у меня куда-то пропадают номера COM-портов (интерйфес RS-232, через который работает моя управлялка освещением на Ke-USB24A). Недавно был COM16, переключил разъёмчик USB — порт вдруг стал уже COM22. Неее, не дело! Полез разбираться и заодно делюсь с вами, читатели, как удалить записи об отключённых и ненужных устройствах и сменить номер COM-порта в Windows. Написано будет про Windows XP, думаю, по другие винды надо будет действовать по аналогии.

Приношу снова извинения за скриншоты: я сначала окучил все устройства, а потом решил накатать в блог: так что на некоторых скриншотах будет всё уже культурно без «мусора», об удалении которого я пишу в статье.

Первым делом я полез в свойства устройства, чтобы сменить номер порта в свойствах устройства и обломался. Мой любимый COM16 (под него настроениа програ по умолчанию) был кем-то занят (по словам системы). Так как с системой я разговариваю также, как с проводочками — «Слышь ты, с##ка!! Охренела чтоле?!», то я вспомнил об одной замечательной системной переменной DEVMGR_SHOW_NONPRESENT_DEVICES, которая позволяет хорошо почистить базу данных (и реестр) от записей о старых устройствах. Но — обо всём по порядку.

Переменная среды DEVMGR_SHOW_NONPRESENT_DEVICES заставляет Диспетчер устройств показывать все-все устройства, записи о которых есть в базе данных Windows (часть хранится где-то в системных папках, часть в реестре — поэтому я пишу о базе данных). Для начала нам надо её установить или создать, если до этого такой шаг никогда не делался.

Тыкаем по значку Мой компьютер правой кнопкой, выбираем Свойства (горячие клавиши: Win+Break). Открывается откно «Свойства системы«.

 Вызов окна "Свойства: Система"

Переходим в нём на вкладку «Дополнительно«, и в самом низу видим кнопку «Переменные среды«. Она нам и нужна. Кстати, замечание в сторону: на этой же вкладке в рамке «Загрузка и восстановление» находится кнопка «Параметры«, за которой сныкана очень полезная галочка «Выполнить автоматическую перезагрузку«, которая на свежей Windows всегда стоит. А это значит, что при возникновении синего экрана (BSOD, STOP 0x…) система сразу же жестоко перезагружается, не давая его как следует рассмотреть. Настоящие пользователи не могут себе простить этого, поэтому можно зайти вэтот раздел настроек и галку снять.

Как перейти к переменным среды

Ну а у нас открыто окно «Переменные среды«, где мы видим два раздела: «Переменные среды пользователя xx» и «Системные переменные«. Вообще, эти все «переменные»- аналог старого доброго SET PATH= и прочих SET xx=yy в bat-файлах. Только теперь, в Windows, они делятся ещё и на персональные для пользователя, или на глобальные для всех пользователей. В локальных я обычно, когда ставлю систему, исправляю TEMP и TMP на что-то более короткое — например, перенаправляю в тот же системный каталог %SystemRoot%\Temp. Раньше из-за этого ругались старые инсталляторы какого-нибудь хитрого софта и старые версии конкретно InstallShield — они не могли создать свои временные файлы по длинному пути. Это уменьшает безопасность системы, так как всякие Word’ы кладут временные файлы документов тоже в Temp и, следовательно, потенциально любой юзер может видеть их в общей временной папке.

Переменные среды

Нам же нужны «Системные переменные«, и конкретно DEVMGR_SHOW_NONPRESENT_DEVICES. Посмотрите в списке, если её нет — тогда нажимаем кнопку «Создать«, и заполняем открывшееся окошко «Новая системная переменная«. Если же переменная есть в списке — проверьте правильность её написания и значение — 1.

Добавляем новую переменную

Регистр написания не имеет значения, но исторически названия переменных обычно пишут заглавными буквами. Итак, убеждаемся, что наша переменная есть в списке.

Убеждаемся, что она у нас есть

После этого обязательно нужно перезагрузить систему!

Удаление неиспользуемых устройств (часть 2)

Итак, мы перезагрузились, и теперь можно открывать диспетчер устройств. Я снова сделаю это через тот же значок «Мой компьютер» на рабочем столе (надо сказать, он только для этого там и висит). Тыкаем правой кнопкой, выбираем в меню пункт «Управление«. Надо сказать, что это быстрее, чем лазить по всяким панелям управления и Пуск’ам. Сравните: Пуск > Настройка > Панель управления > Администрирование > Управление компьютером, или один клик? Хе-хе.

Вызов консоли "Управление Компьютером"

У нас (через некоторое время тупняка) открывается замечательная консоль «Управление компьютером«, в которой нас интересует всего один пункт: «Диспетчер устройств«. Тыкаем на него слева в дереве, и справа у нас радостно открывается другое дерево — всяких устройств, которые подключены в системе и для которых стоят драйвера.

Консоль "Диспетчер устройств"

Мы, не менее радотсно сразу же лезем в меню «Вид«, выбирая пункт «Показать скрытые устройства» и, если наша переменная DEVMGR_SHOW_NONPRESENT_DEVICES была установлена верно и система была перезагружена, мы увидим список устройств раза в два-три больше, чем обычно.

Показать скрытые устройства

Ради интереса можно раскрыть какую-нибудь ветку, чтобы посмотреть, как же система выводит информацию о подключённых и неподключённых устройствах. Я развернул раздел «Клавиатуры» и USB-устройств. Почему вообще так много устройств и откуда они берутся? Дело в том, что система (не от дурости, а для умности) запоминает не только код производителя (VendorID) и модель (ModelID) устройства, а ещё и то место на шине, куда оно подключено. Для всяких плат — это номер (или какой-то внутрений идентификатор) слота PCI, PCI-E, для USB — номер разъёма. Каждая такая комбинация считается совершенно отдельным устройством, для которого нужны драйвера.

Почему же система тогда не просит драйвера от, например, принтера, если мы его переткнули в другой разъём? При первом подключении принтера — понятно, система не знает устройство и просит дрова. А при последующих к другому разъёму? В этом случае работает база данных драйверов, где прописано что для VendorID+ModelID — такой-то драйвер. И при изменении подключения устройства система берёт тот же драйвер, какой и был, ничего не спрашивая.

Итак, рассмотрим скриншот повнимательнее. Зелёным я выделил те устройства, которые система знает (они подключены) в данный момент. Красным — те, которых нет (они сейчас не подключены). Сама система их, если приглядеться, маркирует или яркой, или затенённой иконкой. Клавиатур две, потому что это ноутук с подключенной отдельной клавиатурой по USB. Так как дырок USB у меня 4, и ещё было две разных клавы, то этих «Клавиатура HID» наплодилась куча. Можно смело удалить те, которые серые.

По аналогии можно найти записи о всех-всех флэшках, которые когда-либо тыкались в этот компьютер и прочих других устройствах. Вот она — вся тайная жизнь на ладони :))

Подключённые и отключённые устройства

Ну а нам ещё надо показать, где же можно поменять (или освободить) себе красивый портик COM для наших задач. Эти порты (даже те, которые получаются от RS-232<>USB преобразователей) лежат в разделе «Порты (COM и LPT)«. Моё устройство маркируется как CS COM-USB Bridge, и изначально вдруг повисло на COM22. Мне же хотелось получить назад свой COM16 (на скрине он уже есть). Только включив «Показать скрытые устройства«, я понял всю глубину грехопадения :) Эти чёртовы сотики отожрали себе ВСЕ порты, какие могли!! Естественно, они были не подключены сейчас к системе, изначально их было не видно, а на моём порту COM16 стояло гордое «(используется)». Потому что я переткнул разъём своего Ke-USB24A в другую дырку. А это, видите ли, уже новое мля устройство! Ну ничего! Старое с COM16 было удалено, и текущий девайс был переназначен на тот, старый порт.

Номера COM-портов и привязка к устройствам

Как это сделать? Лезем правой кнопкой на девайс, выбираем свойства (особо резвым можно просто два раза щёлкнуть левой). Показал на примере другого порта.

Вызов свойств устройства

Открывается окно свойств устройства, где нас интересует вкладка «Параметры порта«. Особо отмечу, что все эти скорости, чётности: а) всё равно настраиваются программно в той проге, которая общается с таким USB-RS-232 устройством, б) По USB всё равно ни на что не влияют. Тыкаем кнопку «Дополнительно».

Вкладка "Дополнительно" свойств устройства

И у нас открывается мелкое окошко, но с огромным списком портов. Вообще,номер порта зарезервирован от 1 до 65535, тут решили ограничиться 256. Вот так! А вы- COM1-COM4. Кстати, это хороший камень в сторону тех идиотин, которые делают программаторы (и другие важные и нужные устройства) со старым софтом, где окошко выбора порта выглядит как 4 переключателя-точки (radio-button): «Выберите порт: () COM1 (*) COM2 () COM3 () COM4». И всё. Поэтому, кстати, у меня в проге управления порт выбирается списочком.

Огромный список COM-портов

Здесь можно выбрать любой свободный порт. Я постарался перегруппировать все девайсы так, чтобы высвободить самые первые номера портов. Высвободились COM1 и COM2 — мне хватило. Ещё важное замечание: правильные данные об «(используется)» обновляются всё же после перезагрузки, так что два-три раза систему подёргать придётся. Мне лень — в статье нужно было показать только принцип. Играйтесь!

Выбранный порт и порт в программе управления

Ну а я же сделал себе свой любимый COM16 под девайс, включил свет и пошёл заниматься своими делами. Вот так. Ибо нефига.

Если вас заинтересовала информация из этого поста и вы хотите со мной связаться (или заказать Сборку щита / Консультацию), то пишите мне на почту info@cs-cs.net или звоните на +7-926-286-97-35. Отзываюсь на имя "Электрошаман".
Невнимательных, тупых и наглых продаванов и менеджеров я буду жёстко стебать, если они не заглянут в инфу про контакты для организаций, а скорее кинутся звонить.

11 Отзывов на “Изменение номера COM-портов / Отображение скрытых устройств”


  • 1 Lexa

    Гениально! я об этом и не подозревал. хотя постоянно сталкивался с необходимостью удаления драйверов для всяких сканеров LPT. полезная статья

  • 2 arrow

    Потрясён ясностью изложения, а мне приходилось вычищать реестр, причём ни всегда получалось. Больше ничего вразумительного по данной теме в интернете ни нашёл.
    Действительно древние и весьма полезные программки частенько ограничиваются com4. Спасибо за информацию.

  • 3 CS  [Москва]

    Так в старых книжках про реестр писали что лучше вообще не лазить в секцию где хранятся записи об установленном оборудовании.
    Ну и так в старину и правда было не более 2х LPT и 4х COM. Потому старые программки бОльшего и не имеют — это раньше был абсурд.

  • 4 TRVM

    О гуру! огромное спасибо за работу! Все доходчиво и понятно! Респект!

  • Большое спасибо!!!Помогло заработать отличной программе настройки антенны для модема- Huawei Level Signal,которая не «видит»com с большим номером.Просто и доходчиво!

  • 6 CS  [Москва]

    Не за что! Удачи и жгите =))

  • 7 vostin

    Замечательно ясно расписана очень полезная тема, вот прямо щас избавился от проблемы. Автору респект и огромная благодарность.

  • 8 Swartz

    Автору благодарность, статья полезная.

  • 9 valera

    Интернет это энциклопедия! Пользоваться ей огромное удовольствие.
    Много конечно и мусору попадается, но данному автору могу только высказать слова благодарность от чайников. Всё очень доходчиво! Спасибо!

  • 10 CS  [Москва]

    Не за что!

  • 11 lews

    Как всегда выручаешь… :) Спасибо!

Оставить отзыв

Вы должны войти на блог, чтобы оставить комментарий.