Как узнать ком порт usb модема
1) На Раздел распространяются все Правила Форума.
2) Перед тем, как создать новый топик, убедитесь, что Вы читали Правила создания тем в Разделе.
3) Вопросы, не связанные с программированием (настройки MS Visual Studio, книги, библиотеки и т.д.),
обсуждаются в разделе C/C++: Прочее
4) Вопросы разработки .NET (Windows Form, C++/CLI и т.п.) приложений на Visual C++/C# обсуждаются в разделе .NET.
5) Нарушение Правил может повлечь наказание со стороны модераторов.
Помогите кто знает,
Есть задача написать программу которая посылает на GSM USB модем команды.
Вопрос в том что на разных компах при подключении определяется разный COM порт.
Как определить на каком порту модем висит?
Много всего перерыскал, но ничего работающего не нашел.
Пробовал через SetupDiGetClassDevs, но как бы интерфейса к нему нет что ли(SetupDiEnumDeviceInterfaces возвращает false).
Была попытка через EnumPorts , но узнать к чему принадлежит выданный порт не могу
The RasAdminPortGetInfo function retrieves information about a specified port on a specified server.
DWORD RasAdminPortGetInfo(
const WCHAR* lpszServer,
const WCHAR* lpszPort,
RAS_PORT_1* pRasPort1,
RAS_PORT_STATISTICS* pRasStats,
RAS_PARAMETERS** ppRasParams
);
Как узнать ком порт usb модема

Всех приветствую вновь на страницах своего блога и сегодня хочу рассказать, как подключить com порт usb в Windows . Поговорим, что это такое и для чего используется. Я думаю для начинающих сетевых администраторов, да и просто для продвинутых пользователей это будет интересно, для меня в свое время это было просто какой-то магией, позволяющая настраивать серверное оборудование.
Что подключают через com порт
Через com порт ранее подключали модемы, мышки. Сейчас он используется для соединения с источниками бесперебойного питания, для связи с аппаратными средствами разработки встраиваемых вычислительных систем, спутниковыми ресиверами, кассовыми аппаратами, с приборами систем безопасности объектов, а также с многими прочими устройствами.
С помощью COM-порта можно соединить два компьютера, используя так называемый «нуль-модемный кабель» (см. ниже). Использовался со времен MS-DOS для перекачки файлов с одного компьютера на другой, в UNIX для терминального доступа к другой машине, а в Windows (даже современной) — для отладчика уровня ядра.
Но в сетевом мире через com порт подключаются к консольному порту сетевых устройств (коммутаторов, роутеров, таких брендов как Cisco или Juniper)
Какая схема подключения к коммутаторам через последовательный порт. Есть переходники, например от фирмы st-lab На одном конце USB который вы подключаете к компьютеру, а второй это com порт.
Далее к ком порту подсоединяется вот такой шнурок, com порт, а с другой стороны LAN RJ45, и вся схема дает нам один большой шнурок USB to LAN.
Установка драйверов com порт usb в Windows
К сожалению в Windows подключенные устройства, usb to com не всегда автоматически устанавливаются в системе, и приходится искать для них драйвера. Если вы покупали его сами, то в комплекте шел диск с драйверами, и можно воспользоваться им, если его нет, то смотрим как найти драйвера.
Открываем диспетчер устройств в Windows. Если не знаете как, то нажмите CTR+Pause breake, либо нажмите Win+R и в окне выполнить введите devmgmt.msc. Как видите у меня в разделе Порты (COM и LPT) нашелся на третьем COM порту неизвестный провод, и драйверов для него не нашлось у системы, о чем говорит нам желтый значок.
Переходим в свойства данного устройства и выбираем ИД оборудования, у вас будет, что то по типу usb\VID_067B&PID_2303&REV_0300, вот его вы копируете и ищите в гугле или яндексе.
После чего щелкаем правым кликом по устройству в диспетчере устройств и выбираете установить драйвера, указываете до них путь и ставите, если все ок, то у вас пропадет значок предупреждения.
Далее вы уже можете использовать возможности com порта, с помощью таких утилит на подобие Putty, где вы выбираете пункт Serial и указываете нужный порт Com порта, посмотреть его можно в том же диспетчере устройств.
Надеюсь вы научились и разобрались как подключать com порт usb в Windows.
Программное определение используемого 3g модемом COM порта в Windows
Известно также, что при непосредственном подсоединении модема к порту USB, создается несколько виртуальных COM-портов (для разных моделей число может быть различным, как правило — от 2 до 4 портов).
Номера портов, естественно, произвольные и при каждом подключении могут изменяться.
Один из этих портов распознается в Диспетчере устройств на вкладке «Модемы»как 3G-модем, а остальные порты располагаются во вкладке «Порты (COM и LPT)», и им присваиваются какие-либо номера.
При этом модем использует чаще всего один из COM-портов для чтения команд, а другой для записи ответов.
Иногда бывает, что один COM-порт используется для чтения команд, а ответ пишется сразу в несколько других COM-портов.
Вопрос: как программно(с помощью WINAPI, язык С/С++), определить для данного подключения, в какой (в какие) порты для этого модема осуществлять запись, а из какого (из каких) портов производить чтение ответов?
Моя идея была в том, чтобы программно получить название COM-порта из ярлыка Подключения (см.Исходные данные), а далее отправить стандартную команду AT, при этом в цикле перебирая и прослушивая все свободные COM-порты. Получив ответ на каком-либо из них(либо на нескольких сразу), считать что пара портов для записи-чтения найдена.
Проблема, с которой я столкнулся, заключается в том, что мне не удалось найти подходящей функции WINAPI, которая, грубо говоря, по входному параметру «Имя_подключения» вернула бы «Имя_COM_порта», соответствующее этому подключению.
При этом, в самом ярлыке Подключение этот COM-порт вполне хорошо виден.
(Для примера в случае Мегафона в его Подключении указан COM9, а на вкладке «Порты (COM и LPT)» виден COM10, соответственно пишем в COM9, читаем из COM10. А Alcatel вообще открывает 4 COM-порта).
Для решения этой задачи использовал подмножество функций и структур RAS из WINAPI, но, как сказал выше, не нашел подходящей функции для возврата имени COM-порта.