Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Регистрация драйвера в системе


Автор: EnergoHokum 14.12.2008, 17:07
Доброго времени суток всем. Вопрос такой: есть драйвер (DLPortio, управление LPT-портом). Есть программа, устанавливающая его. Программа организована в виде обыкновенной инсталляшки с тучей кнопочек "Next" -> "Next" и т. д. Драйвер нужно прописывать в систему "одним щелчком мыши". Экспериментально раскопал, что помимо копирования файла драйвера и сопутствующей DLL-ки для его работы нужно создать следующие ключи реестра:

Код

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDlls]
"C:\\WINDOWS\\system32\\DRIVERS\\DLPORTIO.sys"=dword:00000001
"C:\\WINDOWS\\system32\\DRIVERS\\Ctl3d32.dll"=dword:00000001
"C:\\WINDOWS\\system32\\DLPORTIO.dll"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DLPortIO]
"DisplayName"="DriverLINX Port I/O Driver"
"ErrorControl"=dword:00000001
"Group"="SST miniport drivers"
"Start"=dword:00000002
"Tag"=dword:00000001
"Type"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\DLPortIO\Enum]
"0"="Root\\LEGACY_DLPORTIO\\0000"
"Count"=dword:00000001
"NextInstance"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_DLPORTIO]
"NextInstance"=dword:00000001

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_DLPORTIO\0000]
"Service"="DLPortIO"
"Legacy"=dword:00000001
"ConfigFlags"=dword:00000000
"Class"="LegacyDriver"
"ClassGUID"="{8ECC055D-047F-11D1-A537-0000F8753ED1}"
"DeviceDesc"="DriverLINX Port I/O Driver"

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\Root\LEGACY_DLPORTIO\0000\Control]
"*NewlyCreated*"=dword:00000000
"ActiveService"="DLPortIO"


Вот только ветка CurrentControlSet, как оказалось, создаётся динамически, и кроме пользователя System прав на запись туда никто не имеет. Равно как и в ветки ControlSet00n. Как происходит (по науке) регистрация драйвера в системе, и можно-ли её выполнить, используя сценарий комстроки (как вариант, VBS)?

Автор: jonie 14.12.2008, 18:14
это драйвер в стиле NT или WDM? ибо вторые устанавливаются используя SCM

Автор: ama_kid 14.12.2008, 18:42
Цитата(EnergoHokum @  14.12.2008,  18:07 Найти цитируемый пост)
Как происходит (по науке) регистрация драйвера в системе, и можно-ли её выполнить, используя сценарий комстроки (как вариант, VBS)? 
1) Вызов http://msdn.microsoft.com/en-us/library/ms684323.aspx
2) Вызов http://msdn.microsoft.com/en-us/library/ms682450(VS.85).aspx (при этом создадутся все необходимые ключи реестра)
3) Закрытие хендлов
4) Вызов команды "net start DriverName" запускает драйвер на исполнение.
Удаление драйвера из системы происходит аналогично:
1) "Net Stop DriverName"
2) OpenSCManager
3) OpenService
4) DeleteService
5) Закрытие хендлов...

Автор: EnergoHokum 16.12.2008, 20:00
Сделал по совету ama_kid, вроде работает всё. Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)