Здравствуйте, 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 уважением,
Геннадий Майко.