Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Как изменить Friendly Name девайса из кода драйвера  (Прочитано 15852 раз)
0 Пользователей и 5 Гостей смотрят эту тему.
Didalek
Интересующийся

ru
Offline Offline

« : 11-12-2013 05:18 » new

Подскажите, как можно изменить/задать Friendly Name для устройства.
У меня нет своего инсталлера, так что нужно изменить его непосредственно из кода драйвера,
чтобы в Device Manager'е при нескольких девайсах высвечивалось нормальное имя (по своему алгоритму уникальности), а не "my_device#2"
Прочить-то можно с помощью  IoGetDeviceProperty(... DevicePropertyFriendlyName...),
а вот чтобы записать, аналогичной функции IoSetDeviceProperty нет.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #1 : 11-12-2013 05:43 » 

FriendlyName это просто ключ реестра для экземпляра устройства

Например для первого (0000 индекс) экземпляра класса устройств 4D36E96D-E325-11CE-BFC1-08002BE10318 (модемы)

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96D-E325-11CE-BFC1-08002BE10318}\0000

У меня REG_SZ параметр FriendlyName = "SAMSUNG Mobile USB Modem"
Записан

while (8==8)
Didalek
Интересующийся

ru
Offline Offline

« Ответ #2 : 11-12-2013 13:07 » 

Я не хотел бы собирать к ключу путь вручную: \\REGISTRY\\MACHINE\\SYSTEM\\CurrentControlSet\\ + Enum+ VI&PID + и т.д.
искать каким-то образом конкретный instance, чтобы записать в итоге с помощью  ZwSetValueKey.
Нет ли другого способа?
Записан
sss
Специалист

ru
Offline Offline

« Ответ #3 : 11-12-2013 16:11 » 

Вот утром времени не было поискать, сейчас взял да потратил 10 минут на поиск..

Цитата: Windows Driver Kit: Device Installation MSDN 2006

Driver Information in the Registry

....

Drivers must access Plug and Play (PnP) keys in the registry using system routines such as IoGetDeviceProperty or IoOpenDeviceRegistryKey. User-mode setup components should use device installation functions such as SetupDiGetDeviceRegistryProperty or SetupDiOpenDevRegKey. The registry can be accessed from INF files using INF AddReg directives.

....


Я же правильно понял - вы хотите менять имя в какой то логике из под драйвера.
« Последнее редактирование: 11-12-2013 16:19 от sss » Записан

while (8==8)
Didalek
Интересующийся

ru
Offline Offline

« Ответ #4 : 12-12-2013 14:58 » 

Я же правильно понял - вы хотите менять имя в какой то логике из под драйвера.

Именно. так что SetupDiXXX функции мне не подойдут.

Drivers must access Plug and Play (PnP) keys in the registry using system routines such as IoGetDeviceProperty or IoOpenDeviceRegistryKey.

С IoGetDeviceProperty можно прочитать  FriendlyName, но, как я уже писал, аналогичной функции IoSetDeviceProperty  не реализовано.
IoOpenDeviceRegistryKey с флагом PLUGPLAY_REGKEY_DEVICE возвращает handle на подключ Device Parameters,
а мне надо получить доступ к самому ключу.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #5 : 13-12-2013 08:23 » 


возвращает handle на подключ Device Parameters,
а мне надо получить доступ к самому ключу.


Не совсем понятно. Выше на уровень? Так открывайте...
Записан

while (8==8)
Didalek
Интересующийся

ru
Offline Offline

« Ответ #6 : 13-12-2013 17:14 » 

А как ? handle - это же не путь, где можно отпарсить строку. Может, я чего-то не понимаю. Объясните как получить доступ к ключу реестра где хранится instance текущего устройства.

Записан
sss
Специалист

ru
Offline Offline

« Ответ #7 : 14-12-2013 18:23 » 

А как ? handle - это же не путь, где можно отпарсить строку. Может, я чего-то не понимаю. Объясните как получить доступ к ключу реестра где хранится instance текущего устройства.

А да. Прогнал не подумав.
Записан

while (8==8)
x64
Участник

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #8 : 16-05-2014 23:32 » 

Подскажите, как можно изменить/задать Friendly Name для устройства. У меня нет своего инсталлера, так что нужно изменить его непосредственно из кода драйвера

Необходимо обработать запрос IRP_MN_QUERY_DEVICE_TEXT с кодом DeviceTextDescription для девайса, при этом девайс должен быть PDO, реальное или виртуальное - не имеет значения, важна поддержка WDM в драйвере и PnP в частности. В этом суть модели WDM вообще, это надо понимать, если раньше драйвера сами делали кучу типовой работы, дёргая те или иные APIs, то теперь ядро (PnP-менеджер, Power-менеджер и пр.) выполняет большую часть задач и взаимодействует с WDM-драйвером посредством соответствующих запросов, на которые нужно всего лишь корректно отвечать ему.
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines