Здравствуйте.
Есть программа на С++ (Application), есть драйвер, есть исходники.
Код не привожу — много. Если бы просто не работало то и бог с ним,
но работает через раз потому мож кто знает раскажет.
Application запускается без ошибок, если просто
переписать файлы *.sys в папку Drivers. То, что переписал с С++ на Delphi я
работает только один раз.
Потом функция QueryServiceStatus для драйвера возвращает SERVICE_STOPPED,
StartService — false, GetLastError — ERROR_BAD_DRIVER.
После этого Application тоже запускается с ошибкой — не может загрузить драйвер.
Если заново записать в реестр информацию, которая был с драйвером
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcipflt]
"Type"=dword:00000001
"Start"=dword:00000002
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,64,00,72,\
00,69,00,76,00,65,00,72,00,73,00,5c,00,74,00,63,00,69,00,70,00,66,00,6c,00,\
74,00,2e,00,73,00,79,00,73,00,00,00
"DisplayName"="tcipflt"
"Group"="TDI"
то Application работает всегда.
Моя программа работает только одни раз и только сразу после записи в реестр.
Если до этого один раз запустить Application, моя программа уже не работает.
При запущенном Application моя программа запускается без ошибок — и там и там
проверяется если драйвер запущен просто его используем.
После запуска Application ветка, где была информация драйвера
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcipflt]
исчезает. После запуска моей программы тоже, но не всегда.
Если я просто что-то не понимаю, то что?
Если хочешь, сброшу библиотеку для работы с драйверами (загрузка и выгрузка).
Здравствуйте, uka, Вы писали:
uka>Application запускается без ошибок, если просто
uka>переписать файлы *.sys в папку Drivers. То, что переписал с С++ на Delphi я
uka>работает только один раз.
Так не покатит. Драйвер надо устанавливать, для этого нужен его *.inf.
uka>Потом функция QueryServiceStatus для драйвера возвращает SERVICE_STOPPED,
uka>StartService — false, GetLastError — ERROR_BAD_DRIVER.
Нету драйвера.
uka>После этого Application тоже запускается с ошибкой — не может загрузить драйвер.
uka>Если заново записать в реестр информацию, которая был с драйвером
uka>При запущенном Application моя программа запускается без ошибок — и там и там
uka>проверяется если драйвер запущен просто его используем.
uka>После запуска Application ветка, где была информация драйвера
uka>[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\tcipflt]
uka>исчезает. После запуска моей программы тоже, но не всегда.
В эту часть реестра пишет ОС. Никто не гарантирует сохранности записанной туда руками информации.
uka>Если я просто что-то не понимаю, то что?
Посоветую статьи FourF с wasm.ru — цикл из 11ти статей, в одной из первых рассказывается про создание inf и установку драйвера. Еще — Walter Oney, есть в сети в е-виде.
Буду очень благодарен.
uka@rambler.ru
Здравствуйте, uka, Вы писали:
uka>Буду очень благодарен.
uka>uka@rambler.ru
Сбросил по почте файл, в котором dll для загрузки и выгрузки драйвера.
Функции:
SC_HANDLE WINAPI DriverLoad(LPCTSTR pPath, DWORD StartType)
Загружает драйвер. pPath — путь к драйверу, StartType — тип загрузки (boot, auto ...). Возвращает хэндл, через который можно управлять драйвером через IOCTL (если просто надо загрузить — то он не нужен)
BOOL WINAPI DriverUnload(LPCTSTR pPath, SC_HANDLE hDevice)
Выгружает драйвер. pPath — путь к драйверу. hDevice — тот хэндел, который был получен при DriverLoad.
Если нужны исходники — то могу сбросить (можешь в них что-нибудь изменить

)
... И будет Вам счастье !!! ...
Сильно подозреваю что на С.

Я как раз с него и переписывал фиг чего у меня вышло, хотя где там можно в двух функция заблудится ...
Но может тут чего замечу.
А хэндл увы нужен, буду договариватся.
... И будет Вам счастье !!! ...