Re[4]: Как загрузить свой драйвер для USB устройства
От: IZer Украина  
Дата: 23.06.10 12:33
Оценка:
Здравствуйте, Геннадий Майко, Вы писали:

ГМ>Здравствуйте, IZer,


IZ>>>>Есть такая задача: разрабатывается приложение для "расшаривания" USB устройств по сети. При расшаривании устройство должно "исчезать" из системы, к котоой подключено реальное устройство и появляться на удалённой системе. Возникла проблема с тем, как сделать, чтобы устройство "исчезло" из реальной системы. Похоже, надо как-то сказать системе перестроить стек устройств таким образом, чтобы вместо FDO драйвера конкретного устройства (напр., флешки), она загрузила наш драйвер и создала его FDO. (Это предположение появилось в ходе просмотра программой devicetree стека устройств для флешки, расшаренной при помощи программы VMWare с виртуальным компьютером).

ГМ>>>Вы хотите заменить драйвер любого устройства некоего класса или заменить драйвер устройства какого-то одного конкретного, заранее определенного производителя?

IZ>>Вообще любого устройства — любой флешки, любой клавиатуры, мышки, iPod-а и т.п.

ГМ>--
ГМ>В принципе можно програмно заменить один драйвер на другой.

ГМ>Например, для этого надо системе сообщить, что Ваш драйвер способен работать с конкретными классами устройств, прописав их в своем *.inf файле. Затем установить class-coinstaller для всех классов устройств, для которых будет сделана замена, и в нем обрабатывать DIF_SELECTBESTCOMPATDRV и DIF_SELECTDEVICE requests, помечая все остальные драйвера как DNF_BAD_DRIVER (см. http://msdn.microsoft.com/en-us/library/ff544861(VS.85).aspx). Затем нужно инициировать перестройку стека устройств.


ГМ>Но Вы уверены, что именно это Вам нужно? Если Вы хотите действительно заменить все FDO драйвера на свои, то Вы должны написать что-то вроде универсального дайвера, умеюшего работать со всеми существующими устройствами USB, нет?


ГМ>C уважением,

ГМ>Геннадий Майко.

Большое спасибо за помощь
Действительно, это будет нечто вроде "универсального драйвера", задача которого — получать данные о URB запросах от удалённого компьютера и переадресовывать их реальному устройству. По поводу предложенного Вами решения — скажите, на сколько я понял, co-installer работает во время установки драйвера в систему, правильно? То есть если есть необходимость периодически переключаться между оригинальным драйвером и нашим "универсальным" драйвером, то это можно сделать только путём удаления драйвера из системы и установки заново? Если да, то это не совсем подходит т.к. необходима возможность независимо включать/отключать расшаривание отдельных устройств....
Если я ошибаюсь и имеется возможность переключаться между драйверами без переустановки драйвера, скажите пожалуйста — мне, увы, не приходилось много работать с class-coinstaller-ами

Спасибо за помощь!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.