Главная страница
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.013 c
15-1256851810
Юрий
2009-10-30 00:30
2009.12.27
С днем рождения ! 30 октября 2009 пятница


4-1226246501
sqrttrqs
2008-11-09 19:01
2009.12.27
вывод изображения на печать


15-1256427069
Игорь Шевченко
2009-10-25 02:31
2009.12.27
Вот и кончилось лето...


8-1201295650
kblc
2008-01-26 00:14
2009.12.27
GDI+ и изображения


2-1257580554
FIL-23
2009-11-07 10:55
2009.12.27
Трехмерное рисование графиков