Драйвер компилируется с usbd.lib. В файле Sources: Код (Text): TARGETLIBS = $(DDK_LIB_PATH)\usbd.lib При загрузке драйвера, если usbd.sys отсутствует в системе (например, виртуальная машина) - драйвер даже не запускается. Если положить usbd.sys в ту же дирректорию - все в порядке. Как я понимаю существует некий аналог delayed loading для драйвера. А можно ли скомпилировать драйвер "статически", чтоб убрать зависимость от usbd.sys?
Статически нельзя, если у тебя нет соответствующего .lib-файла, содержащего не только символы, но и сам код. Для usbd.sys у тебя его, понятное дело, нет. Решением проблемы здесь было бы прописывание собственного драйвера в группу запуска, которая имеет более низкий приоритет, короче говоря, тебе нужно добиться того, чтобы твой драйвер грузился позже.
Грузи его динамически, в чём проблема-то? ZwLoadDriver() тебе в помощь, если вернёт ошибку - значит драйвера такого нет, если всё нормально, значит драйвер загрузился и можешь делать своё чёрное дело.
x64 Кстати у меня ,когда я последний раз пробовал так делать, ZwLoadDriver в контексте System (короче из под другого драйвера в момент загрузки того) возвращала STATUS_INVALID_PARAMETER или что-то в этом роде, хотя аналогичный вызов из ринг3 аппликухи срабатывал нормально. Мне тогда было лень разбираться. Но все-таки интересно. Тогда проблему решил тем, что у меня был готовый PE лоадер, который просто одним движением руки направился в этот драйвер и с легкостью подгружал к нему другие драйвера)
katrus Помню два аналога, одна функция экспортируется, другая нет. PspLookupSystemDllEntryPoint() вызывает функцию, которая определяет в модуле адрес функции, но она в секции .init MmGetSystemRoutineAddress(), юзоет также не экспортируемую MiFindExportedRoutineByName().
А что [qoute]link -lib[/qoute] отменили? Вытащить *.obj-ектник который тянет зваисимость, отдизасмить, закоментить, пересобрать и опять добавить в либу, делов-то.
ыы) даже если и получится собрать, работать будет наврядли. Наверняка функции обращаются к каким-нибудь глобальным переменным. И в новой статической копии usbd глобальные перменные будут неинициализированы или содержать не те значения
bugaga Ну это уже "партизаншина" начинается. Проще добавить usbd.sys в каталог программы. Всем большое спасибо!