Секция [DDInstall.Services]
Чтобы скопированные в положенное место файлы действительно заработали как настоящий драйвер, необходимо надлежащим образом уведомить SCM Менеджер. Соответственно, для этого необходимо иметь записи в системном Реестре в разделе HKLM\System\CurrentControlSet\Services
по поводу каждого драйвера.
В Windows 2000/XP/2003 работа по регистрации драйвера вынесена в отдельный тип секций [DDInstall.Services].
Можно считать, что данная секция является придатком секции [DDInstall] и всего лишь конкретизирует, какие секции inf-файла (service-install-section) определяют, что именно будет внесено/удалено в Системный Реестр в рамках установки драйвера. В Windows 98 следовало пользоваться директивой AddReg
в секции [DDInstall]. В Windows 2000 inf-файл стал сложнее, и работа с Системным Реестром была выделена в еще один "промежуточный" тип секций [DDInstall.Services].
В том случае, если имя [DDInstall] секции декорировано одним из суффиксов .nt, .ntx86 или ntia64 (что означает принятие к исполнению данной секции только в соответствующей операционной системе), то суффикс .Services
следует присоединять именно к получившемуся декорированному имени [DDInstall.Xxx].
Среди записей секции [DDInstall.Xxx.Services] имеется обязательная директива AddService (помимо еще трех необязательных), которая имеет вид:
AddService=service-name,[flags],service-install-section[ ,eventlog-install-section[,event-log[,event-name]]]
где service-name представляет название сервиса, что обычно совпадает с названием Драйвера (если отбросить расширение .sys). Подраздел с таким именем будет создан в результате инсталляции в разделе Системного Реестра HKLM\System\CurrentControlSet\Services.
Директив AddService в секциях [DDInstall.Xxx.Services] может быть несколько.
Возможные значения поля flags приводятся в таблице 12.4. Можно вводить значения, которые представляют "побитовое ИЛИ" указанных в таблице значений.
Значение поля service-install-section и необязательное для ввода значение поля eventlog-install-section (ссылка на секцию, где описывается установка сервисов протоколирования) объявляют имена секций INF файла типа [ServiceInstall], например:
[Manufacturer] ; секция описания поставщиков %ThisMfg%=DeviceList
[DeviceList] ; секция описания моделей %Model1%= Model1_Inst, _MXX0001 ; <- идентификатор
[Model1_Inst.ntx86] ; [DDInstall] секция инсталляции для NT . . . . [Model1_Inst.ntx86.Services] ; установка драйвера как сервиса Mxx0001 ; Поле flags имеет значение 0x0002 (см. таблицу 12.4) ; ссылка на секцию [ServiceInstall] AddService= Mxx0001, 0x0002, MODEL1_ADDSERVICE_SECTION
[MODEL1_ADDSERVICE_SECTION] ; секция [service-install-section] DisplayName = %Model1.ServiceDesc% ServiceType = 1 ; = SERVICE_KERNEL_DRIVER, см. ntddk.h, wdm.h StartType = 3 ; = SERVICE_DEMAND_START, см. ntddk.h, wdm.h ErrorControl = 1 ; = SERVICE_ERROR_NORMAL, см. ntddk.h, wdm.h ServiceBinary= %12%\SpecialDrv.sys
[Strings] ; Расшифровка значений ThisMfg= "This Manufacturer" Model1= "Model1 (made by This Manufacturer)" Model1.ServiceDesc= "Model1 Special Driver v.1.000"
Таблица 12.4. Значения flags
директивы AddService
Значение | Символьное имя SPSVCINST_Xxx | Описание |
0x0002 | SPSVCINST_ASSOCSERVICE | Драйвер является функциональным драйвером или драйвером в "стиле-NT" |
0x0008 | ...NOCLOBBER_DISPLAYNAME | Не переписывать существовавшее в Системном Реестре значение DisplayName, если такой сервис уже был установлен ранее |
0x0100 | ...NOCLOBBER_DESCRIPTION | Не переписывать описание |
0x0010 | ...NOCLOBBER_STARTTYPE | Не переписывать StartType |
0x0020 | ...NOCLOBBER_ERRORCONTROL | Не переписывать ErrorControl |
0x0040 | ...NOCLOBBER_LOADORDERGROUP | Не переписывать LoadOrderGroup |
0x0080 | ...NOCLOBBER_DEPENDENCIES | Не переписывать Dependencies |
и т.п.) будет рассмотрена далее, после описания секций типа [AddReg].
В секциях типа [DDInstall.Services] могут быть введены директивы DelService (удаления ранее установленных сервисов), Include (включения текста внешних inf-файлов) и директива Needs.Для получения информации по данным необязательным директивам следует обратиться к соответствующей документации, например, документации DDK.