Главная страница
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.022 c
2-1257351706
_
2009-11-04 19:21
2009.12.27
Узнать информацию о видеокарточке.


1-1231859045
Игорь_Залозных
2009-01-13 18:04
2009.12.27
DrawText и текст, который не вместился в прямоугольник


15-1256329810
Юрий
2009-10-24 00:30
2009.12.27
С днем рождения ! 24 октября 2009 суббота


15-1256681905
Германн
2009-10-28 01:18
2009.12.27
Мнемоника


15-1256592610
Юрий
2009-10-27 00:30
2009.12.27
С днем рождения ! 27 октября 2009 вторник