Добрый день! Пишу дрова для линукса. Возник вопрос написать для виндовс. Скачал ДДК, поставил. Покурил доки и выдал такое: Код (Text): #include<ntddk.h> DRIVER_INITIALIZE DriverEntry; NTSTATUS DriverExit(IN PDRIVER_OBJECT drv) { DbgPrint("lpi: exit."); return STATUS_SUCCESS; } NTSTATUS DriverEntry(IN PDRIVER_OBJECT drv, IN PUNICODE_STRING strRegistryPath) { NTSTATUS ret; ret = STATUS_SUCCESS; drv->DriverUnload = DriverExit; DbgPrint("lpi: enter."); return ret; } sources выглядит так Код (Text): TARGETNAME = MYDRIVER TARGETTYPE = DRIVER TARGETPATH = obj KMDF_VERSION_MAJOR = 1 SOURCES = main.c После компиляции копирую mydriver.sys в windows/system32/mydrivers/mydriver.sys В консоли даю команду Код (Text): sc create mydrv bitpath= system32/mydrivers/mydriver.sys type= kernel start= demand Запускаю dbgview и даю команду Код (Text): sc start mydrv В ответ: Код (Text): [SC] start service failed 123: the filename, directory name or volume label syntax is incorrect. Вопрос: Почему sc не хочет загружать мой драйвер? Спасибо. п.с. видновс на виртуальной машине. антивируса нет. ddk 7600.16385.1 п.с.с. проверить правильность путей к файлам не предлагать.
зачем заморачиваться с Код (Text): sc create mydrv bitpath= system32/mydrivers/mydriver.sys type= kernel start= demand Прислушайся к совету n0name
Закоментировал строку KMDF_VERSION_MAJOR = 1 в source (я так понимаю, теперь он не wdf, а обычный wdm будет), перекомпилировал и загрузил при помощи KmdManager - работает. sc - нет. Всем спасибо за помощь! п.с. Всё таки не совсем понятно, почему штатное средство загрузки драйверов (sc) не работает.
потому-что filename, directoryname или volumelabelsyntax - incorrect Кривые руки или шаблонное мышление линуксоида?
> п.с. Всё таки не совсем понятно, почему штатное средство загрузки драйверов (sc) не работает проверить можно достаточно просто. заюзать утилиту filemon (а лучше современную замену - procmon) и поглядеть, куда кто лезет, и какие ключи создаются.
Здесь подробнее пожалуйста. filename - я так понимаю, имя файла драйвера (sys файл, для конкретики). directoryname - путь к драйверу (в моём случае system32/mydrivers/). volumelabelsyntax - это что? Имя диска? Извините за возможно глупый вопрос, но всё-таки, что я сделал не так? Если вам нужна более подробная информация о моих дейсвиях - с радостью её предоставлю. Спасибо. п.с. Я не собираюсь разводить здесь холливар win vs lin, мне просто интерестно узнать о своих ошибках. Именно за этим я сюда и пришёл.
nanoo http://www.windowsfaq.ru/content/view/84/37/ Возможно стоит указать C:\Windows\system32\%drivetpath% ?
А на что указывает driverpath? Если на drivers, то точно не заработает, ибо мой драйвер лежит в system32/mydrivers/
Код (Text): sc create mydrv bitpath= system32/mydrivers/mydriver.sys type= kernel start= demand [SC] Create service SUCCESS
Создание сервиса\драйвера и его запуск - разные вещи. Создание сервиса\драйвера через реестр можно и ручками провести. Главное его запустить. Попробуй в папку драйверов кинуть и путь полный указать.
ну тогда приведи что записано в реестре. да и можешь посмотреть возможные примере там же для валидных драйверов.
http://yfrog.com/e4consolep - создание и неудачная попытка запуска mydrv http://yfrog.com/mdconsoleipfwp - запуск и остановка службы ip6fw http://yfrog.com/0dregeditipfwp - кусок реестра, ответственный за mydrv http://yfrog.com/miregeditmydrvp - кусок реестра, ответсвенный за ip6fw