Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.12.27;
Скачать: CL | DM;

Вниз

Добраться до PortName, через SetupAPI.   Найти похожие ветки 

 
POP   (2008-11-01 20:36) [0]

Подключен например у меня модем IDC. В свойствах (в диспетчере задач) вижу, он висит на COM2.

Как мне программно до этого "COM2" (PortName в реестре) добраться?

Через SetupAPI.

Пока додумался только вот до чего:

Через SetupDiGetClassDevs получаю список всех устройств в классе "Модемы", то есть юзаю GUID_DEVCLASS_MODEM.

Далее использую SetupDiEnumDeviceInfo и получаю заполненную структуру SPDevInfoData для каждого устройства (модема)

Далее, через SetupDiGetDeviceRegistryProperty (подсовываю ей SPDevInfoData) могу получить разную инфу, типа имя устройства, FriendlyName и тд.

То есть, в конечно итоге, можно ли добраться до досового имени PortName имея хендл устройства (из SPDevInfoData)?

Либо используя какую-нибудь инфу полученную с помощью SetupDiGetDeviceRegistryProperty?


 
POP   (2008-11-02 02:00) [1]

В процессе изучения вопроса обнаружил вот что:

Девайсы могут быть прописаны как в "Ports", так и в "Modems" в Девайс менеджере.

Девайсы могут иметь два пути по которым они открываются CreateFile: это обычные DOS имена типа COM1, COM2 и тд, и служебные, типа usb#vid_067b&pid_2303#5&1489a85&0&2#{86e0d1e0-8089-11d0-9ce4-08003e301f73}

Служебное имя называется DevicePath.

DevicePath можно получить фунциями SetupDiEnumDeviceInterfaces и SetupDiGetDeviceInterfaceDetail

Но перед эти нужно составить список устройств некоего класса, например "Ports" и подсунуть этим фунциям.

Список получается при помощи ф-и: SetupDiGetClassDevs(@GUID_DEVCLASS_PORTS, nil, 0, DIGCF_PRESENT or DIGCF_DEVICEINTERFACE);

Так вот проблема в том, что для класса "Modems" эта ф-я не найдет ни одного девайса с DIGCF_DEVICEINTERFACE, а следовательно невозможно будет в дальнейшем получить DevicePath по которому можно коннектиться к устройству.

Для класса "Ports" найдутся все порты без проблем.. видимо они обьявлены как с интерфесом.

То есть возникает вопрос:

Каким макаром можно находить DevicePath и коннектиться к устройствам перечисленным в "Modems"?

На практике это выглядит так, вы в своей программе при помощи SetupAPI нашли все устройства в классе "Modems" и вывели из названия, юзер тыкает мышкой и выбирает один из них... далее как коннектиться к ним?


 
tesseract ©   (2008-11-06 10:25) [2]


> вывели из названия, юзер тыкает мышкой и выбирает один из
> них... далее как коннектиться к ним?


Вообще коннектиться к ним не надо - полученным устройством можно будет работать через CreateFile/DeviceIoControl - если у тебя есть список параметров для драйвера этих функций. Для разных драйверов он может быть разным.

Чем тебя RasDial не устравивает ? С RasEnumDevices намного проще найти модем.

ЗЫ: Или тебе  надо с этим модемом по душам через COM-порт  поговорить ?



Страницы: 1 вся ветка

Текущий архив: 2009.12.27;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.617 c
15-1256651126
Ьу
2009-10-27 16:45
2009.12.27
Как линейно интерполировать значение между тремя точками.


15-1256342365
POOP
2009-10-24 03:59
2009.12.27
Простое проектирование схем


2-1257909781
igan
2009-11-11 06:23
2009.12.27
Типы данных C, VB -> Delphi


2-1252914724
VirEx(home)
2009-09-14 11:52
2009.12.27
сервис + приложение (обмен данными)


2-1257412157
zorik
2009-11-05 12:09
2009.12.27
xml отчеты word