Поделиться через


Директива INF AddService

Примечание

Эта директива не используется в INF-файлах, устанавливающих устройства, для которых не требуются драйверы, такие как модемы или мониторы дисплея.

Директива AddService используется в INF DDInstall. Раздел Services или раздел INF DefaultInstall.Services. Он определяет характеристики служб, связанных с драйверами, такие как способ и время загрузки служб, а также все зависимости от других базовых драйверов или служб прежних версий. При необходимости эта директива также настраивает службы ведения журнала событий для устройства.

[DDInstall.Services] 
 
AddService=ServiceName,[flags],service-install-section
                     [,event-log-install-section[,[EventLogType][,EventName]]]
...

Записи

ServiceName
Указывает имя устанавливаемой службы. Имя должно быть достаточно уникальным, чтобы оно вряд ли конфликтовать со службой, установленной другим INF-файлом. Например, имя службы может включать краткое сокращение названия вашей компании в виде префикса или суффикса. Это имя не должно быть локализовано. Он должен быть одинаковым независимо от локального языка системы.

flags
Указывает один или несколько (ORed) из следующих системных флагов, определенных в Setupapi.h, выраженных в виде шестнадцатеричного значения:

0x00000001 (SPSVCINST_TAGTOFRONT)
Переместите тег именованной службы в начало списка заказов группы, тем самым гарантируя, что он загружается сначала в этой группе (если только установленное впоследствии устройство с этой спецификацией INF не вытесняет его). Inf-файлы, устанавливающие исключительно устройства PnP и устройства с драйверами WDM, не должны устанавливать этот флаг.

0x00000002 (SPSVCINST_ASSOCSERVICE)
Назначьте именованную службу в качестве драйвера функции PnP (или устаревшего драйвера) для устройства, устанавливаемого этим INF-файлом.

Чтобы указать, что служба является драйвером функции для устройства, служба должна указать флаг SPSVCINST_ASSOCSERVICE в директиве AddService . Для службы, например драйвера фильтра или другого компонента драйвера, флаг использовать не следует.

Каждый драйвер устройства INF должен иметь ровно одну связанную службу. Inf не требует связанной службы, если это inf расширения или использует директивы Include/Needs для наследования связанной службы от другого INF. Для устройств, для которых не требуется драйвер функции, драйвер NULL можно указать в качестве связанной службы следующим образом:

AddService = ,2

0x00000008 (SPSVCINST_NOCLOBBER_DISPLAYNAME)
Не перезаписывайте понятное имя данной службы (необязательно), если эта служба уже существует в системе.

0x00000010 (SPSVCINST_NOCLOBBER_STARTTYPE)
Не перезаписывайте тип запуска данной службы, если эта именованной служба уже существует в системе.

0x00000020 (SPSVCINST_NOCLOBBER_ERRORCONTROL)
Не перезаписывайте значение для управления ошибками данной службы, если эта именованной служба уже существует в системе.

0x00000040 (SPSVCINST_NOCLOBBER_LOADORDERGROUP)
Не перезаписывайте значение группы load-order-group данной службы, если эта именованной служба уже существует в системе. Inf-файлы, устанавливающие исключительно устройства PnP и устройства с драйверами WDM, не должны устанавливать этот флаг.

0x00000080 (SPSVCINST_NOCLOBBER_DEPENDENCIES)
Не перезаписывайте список зависимостей данной службы, если эта именованной служба уже существует в системе. Inf-файлы, устанавливающие исключительно устройства PnP и устройства с драйверами WDM, не должны устанавливать этот флаг.

0x00000100 (SPSVCINST_NOCLOBBER_DESCRIPTION)
Не перезаписывайте (необязательное) описание данной службы, если эта служба уже существует в системе.

0x00000400 (SPSVCINST_CLOBBER_SECURITY) (Windows XP и более поздние версии Windows)
Перезапишите параметры безопасности для службы, если эта служба уже существует в системе.

0x00000800 (SPSVCSINST_STARTSERVICE) (Windows Vista и более поздние версии Windows)
Запустите службу после установки службы. Этот флаг нельзя использовать для запуска службы, реализующей драйвер функции Plug and Play (PnP) или драйвер фильтра для устройства. В противном случае этот флаг можно использовать для запуска службы в пользовательском режиме или режиме ядра, управляемой диспетчером управления службами (SCM).

0x00001000 (SPSVCINST_NOCLOBBER_REQUIREDPRIVILEGES) (Windows 7 и более поздние версии Windows)
Не перезаписывайте привилегии для данной службы, если эта служба уже существует в системе.

0x00002000 (SPSVCINST_NOCLOBBER_TRIGGERS) (Windows 10 версии 2004 и более поздних версий Windows)
Не перезаписывайте триггеры для данной службы, если эта служба уже существует в системе и имеет существующие триггеры. Дополнительные сведения о триггерах см. в директиве AddTrigger ниже.

0x00004000 (SPSVCINST_NOCLOBBER_SERVICESIDTYPE) (Windows 10 версии 2004 и более поздних версий Windows)
Не перезаписывайте сведения о идентификаторе безопасности для данной службы, если эта служба уже существует в системе и имеет сведения о идентификаторе безопасности. Дополнительные сведения см. в директиве ServiceSidType ниже.

0x00008000 (SPSVCINST_NOCLOBBER_DELAYEDAUTOSTART) (Windows 10 версии 2004 и более поздних версий Windows)
Не перезаписывание значения отложенного автозапуска для данной службы, если эта служба уже существует в системе и имеет существующее значение. Дополнительные сведения см. в директиве DelayedAutoStart ниже.

0x00020000 (SPSVCINST_NOCLOBBER_FAILUREACTIONS) (Windows 11 версии 22H2 и более поздних версий Windows)
Не перезаписывайте действия сбоя для данной службы, если эта служба уже существует в системе и имеет существующие действия по сбоям. Дополнительные сведения о действиях сбоя см. в директиве FailureActions ниже.

0x00040000 (SPSVCINST_NOCLOBBER_BOOTFLAGS) (Windows 11 сборка 25381 и более поздние версии Windows) Не перезаписывать значение флагов загрузки для данной службы, если эта служба уже существует в системе и имеет существующее значение. Дополнительные сведения см. в директиве BootFlags ниже.

service-install-section
Ссылается на раздел, определенный inf-writer, который содержит сведения об установке именованной службы для этого устройства (или устройств). Дополнительные сведения см. в следующем разделе Примечаний .

event-log-install-section
При необходимости ссылается на раздел, определяемый inf-writer, в котором настроены службы ведения журнала событий для этого устройства (или устройств).

EventLogType
При необходимости указывает одно из значений System, Security или Application. Если этот параметр опущен, по умолчанию используется значение System, которое почти всегда подходит для установки драйверов устройств.

Например, inf будет указывать безопасность только в том случае, если устанавливаемый драйвер обеспечивает собственную поддержку безопасности.

EventName
При необходимости указывает имя, используемое для журнала событий. Если этот параметр опущен, по умолчанию используется заданное имя_службы.

Комментарии

В DDInstall можно вставить определенные системой расширения и расширения без учета регистра. Раздел служб, содержащий директиву AddService в файлах INF для разных операционных систем и (или) кроссплатформенных INF-файлов для указания установок для конкретной платформы или ОС.

Каждое имя раздела, созданного с помощью ЗАПИСИ INF, должно быть уникальным в INF-файле и соответствовать общим правилам определения имен разделов. Дополнительные сведения об этих правилах см. в статье Общие правила синтаксиса для ФАЙЛОВ INF.

Директива AddService должна ссылаться на именованный раздел service-install-section в другом месте INF-файла . Каждый такой раздел имеет следующую форму:

[service-install-section]
 
[DisplayName=name]
[Description=description-string]
ServiceType=type-code
StartType=start-code
ErrorControl=error-control-level
ServiceBinary=path-to-service
[StartName=service-start-name]
[AddReg=add-registry-section[, add-registry-section] ...]
[DelReg=del-registry-section[, del-registry-section] ...]
[BitReg=bit-registry-section[,bit-registry-section] ...]
[LoadOrderGroup=load-order-group-name]
[Dependencies=depend-on-item-name[,depend-on-item-name]
[Security="security-descriptor-string"]...]
[RequiredPrivileges=privilege-name[,privilege-name]...] (Windows 7 and later versions of Windows)
[ServiceSidType=value] (Windows 10 Version 2004 and later versions of Windows)
[DelayedAutoStart=value] (Windows 10 Version 2004 and later versions of Windows)
[AddTrigger=service-trigger-install-section[, service-trigger-install-section, ...]] (Windows 10 Version 2004 and later versions of Windows)
[FailureActions=service-failure-actions-install-section] (Windows 11 version 22H2 and later versions of Windows)
[BootFlags=value] (Windows 11 build 25381 and later versions of Windows)

Каждый раздел service-install-section должен содержать по крайней мере записи ServiceType, StartType, ErrorControl и ServiceBinary , как показано ниже. Однако остальные записи являются необязательными.

Записи и значения раздела Service-Install

Displayname=Имя
Указывает понятное имя службы или драйвера, как правило, для простоты локализации, выраженное в виде токена %strkey%, определенного в разделе Strings INF-файла.

Описание=строка описания
При необходимости задает строку, описывающую службу, которая обычно выражается в виде токена %strkey%, определенного в разделе Strings INF-файла.

Эта строка предоставляет пользователю больше сведений о службе, чем DisplayName. Например, displayName может иметь тип "DHCP-клиент", а описание может иметь вид "Управляет конфигурацией сети путем регистрации и обновления IP-адресов и DNS-имен".

Строка описания должна быть достаточно длинной, чтобы быть описательной, но не так долго, чтобы быть неловкой. Если строка описания содержит какие-либо токены %strkey%, каждый токен может представлять не более 511 символов. Общая строка после подстановки токена строки не должна превышать 1024 символа.

ServiceType=type-code
Код типа для драйвера устройства в режиме ядра должен иметь значение 0x00000001 (SERVICE_KERNEL_DRIVER).

Код типа для службы Microsoft Win32, установленной для устройства, должен иметь значение 0x00000010 (SERVICE_WIN32_OWN_PROCESS) или 0x00000020 (SERVICE_WIN32_SHARE_PROCESS). Если служба Win32 может взаимодействовать с рабочим столом, значение type-code должно быть объединено с 0x00000100 (SERVICE_INTERACTIVE_PROCESS).

Код типа для сетевого драйвера самого высокого уровня, например перенаправителя или драйвера файловой системы, должен иметь значение 0x00000002 (SERVICE_FILE_SYSTEM_DRIVER).

Константы SERVICE_xxxx определены в Wdm.h и Ntddk.h.

StartType=start-code
Указывает, когда следует запустить драйвер в виде одного из следующих числовых значений, выраженных в десятичном формате или, как показано в следующем списке, в шестнадцатеричной нотации.

0x0 (SERVICE_BOOT_START)
Указывает драйвер, запущенный загрузчиком операционной системы.

Это значение необходимо использовать для драйверов устройств, необходимых для загрузки операционной системы.

0x1 (SERVICE_SYSTEM_START)
Указывает драйвер, запущенный во время инициализации операционной системы.

Это значение должно использоваться драйверами PnP, которые выполняют обнаружение устройств во время инициализации, но не требуются для загрузки системы.

Например, драйвер PnP, который также может обнаруживать устаревшее устройство, должен указать это значение в своем INF-файле, чтобы его подпрограмма DriverEntry вызывалась для поиска устаревшего устройства, даже если это устройство не может быть перечислено диспетчером PnP.

0x2 (SERVICE_AUTO_START)
Указывает службу, запущенную диспетчером управления службами во время запуска системы.

Это значение никогда не следует использовать в INF-файлах для драйверов устройств WDM или PnP.

0x3 (SERVICE_DEMAND_START)
Указывает, что служба запущена по запросу диспетчером PnP при перечислении соответствующего устройства или, возможно, диспетчером управления службами в ответ на явный запрос пользователя на устройство, отличное от PnP.

Это значение следует использовать в INF-файлах для всех драйверов WDM устройств, которые не требуются для загрузки системы, и для всех драйверов устройств PnP, которые не требуются для загрузки системы и не участвуют в обнаружении устройств.

0x4 (SERVICE_DISABLED)
Указывает службу, которая не может быть запущена.

Это значение можно использовать для временного отключения служб драйверов для устройства. Однако устройство или драйвер невозможно установить, если это значение указано в разделе service-install в INF-файле.

Дополнительные сведения о StartType см. в разделе Указание порядка загрузки драйвера.

ErrorControl=уровень управления ошибками
Задает уровень управления ошибками в виде одного из следующих числовых значений, выраженных в десятичном формате или, как показано в следующем списке, в шестнадцатеричной нотации.

0x0 (SERVICE_ERROR_IGNORE)
Если драйверу не удается загрузить или инициализировать, продолжите запуск системы и не выведите предупреждение для пользователя.

0x1 (SERVICE_ERROR_NORMAL)
Если драйверу не удается загрузить или инициализировать устройство, следует продолжить запуск системы, но вывести предупреждение для пользователя.

0x2 (SERVICE_ERROR_SEVERE)
Если драйвер не загружается, при запуске системы необходимо переключиться на набор элементов управления LastKnownGood в реестре и продолжить запуск системы, даже если драйвер снова указывает на ошибку загрузки или устройства или драйвера.

0x3 (SERVICE_ERROR_CRITICAL)
Если драйверу не удается загрузиться и система не использует набор элементов управления LastKnownGood реестра, переключитесь на LastKnownGood и повторите попытку .

Если запуск по-прежнему завершается сбоем при использовании LastKnownGood, выполните процедуру проверка ошибок. (Только устройства или драйверы, необходимые для загрузки системы, указывают это значение в СВОИХ INF-файлах.)

ServiceBinary=путь к службе
Указывает путь к двоичному файлу для службы, выраженный как %dirid%\filename.

Это либо настраиваемый идентификатор каталога, либо один из системных идентификаторов каталогов, описанных в разделе Использование dirids. Заданное имя файла указывает файл, уже переданный (см. директиву INF CopyFiles) с исходного носителя распространения в этот каталог на целевом компьютере.

StartName=service-start-name Эта необязательная запись указывает начальное имя, которое должно быть связано со службой. Если type-code указывает 1 (SERVICE_KERNEL_DRIVER) или 2 (SERVICE_FILE_SYSTEM_DRIVER), это имя является именем объекта драйвера, которое диспетчер ввода-вывода использует для загрузки драйвера. Если type-code содержит битовое 0x00000010 (SERVICE_WIN32_OWN_PROCESS) или 0x00000020 (SERVICE_WIN32_SHARE_PROCESS), это имя может быть одним из допустимых значений параметра lpServiceStartName API CreateService .

AddReg=add-registry-section[,add-registry-section]...
Ссылается на один или несколько разделов add-registry-defined inf-writer, в которых настроены все сведения о реестре, относящиеся к вновь установленным службам. Дополнительные сведения см. в разделе Директива INF AddReg.

DelReg=del-registry-section[,del-registry-section]...
Ссылается на один или несколько разделов del-registry,определяемых inf-writer, в которых удаляются соответствующие сведения о реестре для уже установленных служб. Дополнительные сведения см. в разделе Директива INF DelReg.

Эта директива почти никогда не используется в разделе service-install-section, но она может использоваться в INF-файле, который "обновляет" реестр для предыдущей установки той же службы устройства или драйвера.

BitReg=bit-registry-section[,bit-registry-section]...
Является допустимым в разделе service-install-section, но почти не используется.

LoadOrderGroup=load-order-group-name
Эта необязательная запись определяет группу порядка загрузки, членом которой является этот драйвер. Это может быть одна из "стандартных" групп заказов нагрузки, например класс SCSI или NDIS.

Как правило, эта запись не требуется для устройств с драйверами WDM или устройств исключительно PnP, если для такой группы нет устаревших зависимостей. Однако эта запись может быть полезна, если обнаружение устройств поддерживается загрузкой группы драйверов в определенном порядке.

Дополнительные сведения о LoadOrderGroup см. в разделе Указание порядка загрузки драйвера.

Зависимости=depend-on-item-name[,depend-on-item-name]... Каждый элемент depend-on-item-name в списке зависимостей указывает имя службы или группы порядка загрузки, от которой зависит устройство или драйвер.

Если в зависимости от имени элемента указана служба, то служба, которая должна быть запущена до запуска этого драйвера. Например, inf для системных служб печати WIN32 TCP/IP зависит от поддержки базового стека транспорта TCP/IP (в режиме ядра). Следовательно, inf для служб печати TCP/IP указывает эту запись как Dependencies=TCPIP.

Зависимость от имени элемента может указать группу порядка загрузки, от которой зависит это устройство или драйвер. Такой драйвер запускается только в том случае, если запущен хотя бы один член указанной группы. Предшествуйте имени группы знаком "плюс" (+). Например, в системных службах RAS INF может быть запись , например Dependencies = +NetBIOSGroup,RpcSS , которая содержит как группу заказа нагрузки, так и службу.

Security="security-descriptor-string"
Указывает дескриптор безопасности, применяемый к службе. Этот дескриптор безопасности задает разрешения, необходимые для выполнения таких операций, как запуск, остановка и настройка службы. Строковое значение security-descriptor-string — это строка с токенами, обозначающая компонент безопасности DACL (D:).

Сведения о строках дескриптора безопасности см. в статье Язык определения дескриптора безопасности (Windows). Сведения о формате строк дескриптора безопасности см. в разделе Язык определения дескрипторов безопасности (Windows).

Дополнительные сведения о том, как указать дескрипторы безопасности, см. в разделе Создание безопасных установок устройств.

RequiredPrivileges=privilege-name[,privilege-name]...

Примечание

Это значение можно использовать только для служб Win32 и доступно только в Windows 7 и более поздних версий.

Каждое имя привилегий в списке — это имя привилегии, необходимой службе. Список имен привилегий см. в разделе Константы привилегий (Windows). Для каждого имени привилегии требуется только текстовое имя. Например, имя привилегии должно быть записано как SeAuditPrivilege, но не SE_AUDIT_NAME.

Дополнительные сведения о необходимых для службы привилегиях см. в разделе SERVICE_REQUIRED_PRIVILEGES_INFO (Windows).

ServiceSidType=Значение

Примечание

Это значение можно использовать только для служб Win32 и доступно только в Windows 10 версии 2004 и выше.

Эта запись может использовать любое допустимое значение, как описано в SERVICE_SID_INFO.

DelayedAutoStart=Значение

Примечание

Это значение можно использовать только для служб Win32 и доступно только для Windows 10 2004 и более поздних версий.

Содержит параметр отложенного автозапуска службы.

Если этот член 0x0, служба запускается во время загрузки системы. В противном случае служба запускается после запуска других служб автоматического запуска и небольшой задержки.

Этот параметр игнорируется, если служба не является службой автоматического запуска.

Дополнительные сведения см. на этой странице.

AddTrigger=service-trigger-install-section [, service-trigger-install-section, ...]
Указывает события триггера, регистрируемые для службы Win32 , чтобы служба была запущена или остановлена при возникновении события триггера. Дополнительные сведения о событиях триггера службы см. в разделе События триггера службы.

Каждый именованный раздел service-trigger-install-section , на который ссылается директива AddTrigger, имеет следующий формат:

[service-trigger-install-section]

TriggerType=trigger-type
Action=action-type
SubType=trigger-subtype
[DataItem=data-type,data]
...

BootFlags=Значение

Примечание

Это значение можно использовать только со службами драйверов в режиме ядра и доступно только в Windows 11 сборки 25381 и более поздних версий.

При необходимости указывает, когда операционная система должна повысить значение StartType драйвера до 0x0 (SERVICE_BOOT_START). Можно указать одно или несколько (ORed) из следующих числовых значений, выраженных в виде шестнадцатеричных значений.

  • 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) Указывает, что драйвер должен быть повышен при загрузке из сети.

  • 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) Указывает, что драйвер должен быть повышен при загрузке с виртуального жесткого диска.

  • 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD)
    Указывает, что драйвер должен быть повышен до при загрузке с USB-диска.

  • 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD)
    Указывает, что драйвер должен быть повышен при загрузке из sd-хранилища.

  • 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD)
    Указывает, что драйвер должен быть повышен при загрузке с диска на контроллере USB 3.0.

  • 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD) Указывает, что драйвер должен быть повышен, если загрузка при измеренной загрузке включена.

  • 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD)
    Указывает, что драйвер должен быть повышен при загрузке с включенной загрузкой средства проверки.

  • 0x80 (CM_SERVICE_WINPE_BOOT_LOAD)
    Указывает, что драйвер должен быть повышен при загрузке в WinPE.

Записи и значения раздела service-trigger-install-section

TriggerType=тип триггера
Указывает тип события триггера службы в одном из следующих числовых значений, выраженных в десятичной или шестнадцатеричной нотации, как показано в следующем списке:

0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL)
Указывает, что событие активируется при поступлении устройства указанного класса интерфейса устройства или присутствует при запуске системы.

Дополнительные сведения см. в разделе структура SERVICE_TRIGGER.

Действий=тип действия
Указывает действие, выполняемое при возникновении указанного события триггера.

0x1 (SERVICE_TRIGGER_ACTION_SERVICE_START)
Запустите службу при возникновении указанного события триггера.

0x2 (SERVICE_TRIGGER_ACTION_SERVICE_STOP)
Остановите службу при возникновении указанного события триггера.

Дополнительные сведения см. в разделе структура SERVICE_TRIGGER.

Подтип=подтип триггера
Указывает GUID, определяющий подтип события триггера. Значение зависит от значения TriggerType.

Если параметр TriggerType имеет значение 0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL), SubType задает ИДЕНТИФИКАТОР GUID, идентифицирующий класс интерфейса устройства.

Дополнительные сведения см. в разделе структура SERVICE_TRIGGER.

Dataitem=тип данных, данные
При необходимости задает данные, относящиеся к триггеру, для события триггера службы.

Если параметр TriggerType0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL), можно указать необязательный dataItem с типом данных 0x2 (SERVICE_TRIGGER_DATA_TYPE_STRING), чтобы область класс интерфейса устройства к определенному идентификатору оборудования или совместимого идентификатора.

Дополнительные сведения см. в разделе структура SERVICE_TRIGGER_SPECIFIC_DATA_ITEM.

Рекомендуется использовать директиву AddTrigger для запуска службы при поступлении интерфейса устройства. Дополнительные сведения см. в статье Взаимодействие служб Win32 с устройствами.

Примечание

Синтаксис AddTrigger доступен только в Windows 10 версии 2004 и далее.

FailureActions=service-failure-actions-install-section
При необходимости указывает действие, которое должен выполнять контроллер службы при сбое службы.

Диспетчер управления службами подсчитывает количество неудач каждой службы с момента загрузки системы. Счетчик сбрасывается до 0, если служба не завершилась сбоем в течение периода сброса секунд. При сбое службы в течение N-го времени контроллер службы выполняет действие, указанное в элементе N списка Действий. Если N больше числа действий, контроллер службы повторяет последнее действие в списке.

Раздел service-failure-actions-install-section, на который ссылается директива FailureActions, имеет следующий формат:

[service-failure-actions-install-section]

[ResetPeriod=reset-period]
[NonCrashFailures=value]
Action=failure-action-type,delay
[Action=failure-action-type,delay]
...

Записи и значения service-failure-actions-install-section

ResetPeriod=период сброса
Указывает время, по истечении которого счетчик сбоев сбрасывается до нуля, если сбои отсутствуют, в секундах. Количество сбоев не сбрасывается по умолчанию, если период сброса не указан.

Дополнительные сведения см. в разделе структура SERVICE_FAILURE_ACTIONSW.

NonCrashFailures=Значение
Содержит параметр флага действий сбоя для службы. Параметр определяет, когда должны выполняться действия по сбою. Значение 0x0 означает False, а значение 0x1 — true.

Дополнительные сведения см. в разделе структура SERVICE_FAILURE_ACTIONS_FLAG (winsvc.h).

Действий=failure-action-type,delay
Указывает действие, которое может выполнять диспетчер элементов управления службами. Несколько записей действий формируют упорядоченный список действий сбоя. Дополнительные сведения см. в разделе структура SC_ACTION.

Примечание

Синтаксис FailureActions можно использовать только для служб Win32 и доступен начиная с Windows 11 версии 22H2.

Указание порядка загрузки драйвера

Операционная система загружает драйверы в соответствии со значением startType раздела service-install-section следующим образом:

  • На начальном этапе загрузки операционная система загружает все драйверы 0x0 (SERVICE_BOOT_START).

  • На этапе запуска системы операционная система сначала загружает все драйверы WDM и PnP, для которых диспетчер PnP находит узлы устройств (devnodes) (независимо от того, указывают ли их INF-файлы 0x01 для SERVICE_SYSTEM_START или 0x03 для SERVICE_DEMAND_START). Затем операционная система загружает все оставшиеся драйверы SERVICE_SYSTEM_START.

  • На этапе автоматического запуска операционная система загружает все оставшиеся драйверы SERVICE_AUTO_START.

Дополнительные сведения о зависимостях см. в разделе Указание порядка загрузки драйвера.

Повышение начального типа драйвера при загрузке в зависимости от сценария загрузки

В зависимости от сценария загрузки можно использовать значение реестра BootFlags для управления тем, когда операционная система должна повысить значение StartType драйвера до 0x0 (SERVICE_BOOT_START). Можно указать одно или несколько (ORed) из следующих числовых значений, выраженных в виде шестнадцатеричного значения:

  • 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) указывает, что драйвер должен быть повышен при загрузке из сети.

  • 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) указывает, что драйвер следует повысить при загрузке с виртуального жесткого диска.

  • 0x4 (CM_SERVICE_USB_DISK_BOOT_LOAD) указывает, что драйвер должен быть повышен до при загрузке с USB-диска.

  • 0x8 (CM_SERVICE_SD_DISK_BOOT_LOAD) указывает, что драйвер должен быть повышен при загрузке из sd-хранилища.

  • 0x10 (CM_SERVICE_USB3_DISK_BOOT_LOAD) указывает, что драйвер следует повысить при загрузке с диска на контроллере USB 3.0.

  • 0x20 (CM_SERVICE_MEASURED_BOOT_LOAD) указывает, что драйвер должен быть повышен, если включена загрузка во время измеряемой загрузки.

  • 0x40 (CM_SERVICE_VERIFIER_BOOT_LOAD) указывает, что драйвер должен быть повышен при загрузке с включенной загрузкой средства проверки.

  • 0x80 (CM_SERVICE_WINPE_BOOT_LOAD) указывает, что драйвер следует повысить при загрузке в WinPE.

Раздел service-install-section имеет следующую общую форму:

[service-install-section]
AddReg=add-registry-section
...

[add-registry-section]
HKR,,BootFlags,0x00010003,0x14 ; CM_SERVICE_USB3_DISK_BOOT_LOAD|CM_SERVICE_USB_DISK_BOOT_LOAD

Примечание

Этот синтаксис следует использовать только в версиях Windows и сборках старше Windows 11 сборки 25381; для Windows 11 сборки 25381 и более поздних версий используйте директиву BootFlags.

Регистрация для ведения журнала событий

Директива AddService также может ссылаться на раздел event-log-install-section в другом месте INF-файла . Каждый такой раздел имеет следующую форму:

[event-log-install-section]
 
AddReg=add-registry-section[, add-registry-section]...
[DelReg=del-registry-section[, del-registry-section]...] 
[BitReg=bit-registry-section[,bit-registry-section]...]
 ...

Для типичного INF-файла устройства или драйвера в разделе event-log-install-section используется только директива AddReg для настройки файла сообщений журнала событий для драйвера. Этот раздел add-registry-section для ведения журнала событий имеет следующую общую форму:

[drivername_EventLog_AddReg]
HKR,,EventMessageFile,0x00020000,"path\IoLogMsg.dll;path\driver.sys"
HKR,,TypesSupported,0x00010001,7 

В частности, раздел добавляет две записи значений в подраздел реестра, созданный для устройства или драйвера, следующим образом:

  • Запись значения с именем EventMessageFile имеет тип REG_EXPAND_SZ, как указано в FLG_ADDREG_TYPE_EXPAND_SZ значении 0x00020000. Его значение, заключенное в двойные кавычки (), связывает предоставленный системой IoLogMsg.dll (но может связать другую библиотеку DLL ведения журнала) с двоичным файлом драйвера. Обычно пути к каждому из этих файлов указываются следующим образом:

    %%SystemRoot%%\System32\IoLogMsg.dll

    %%SystemRoot%%\System32\drivers\driver.sys

  • Запись значения с именем TypesSupported имеет тип REG_DWORD, как указано в FLG_ADDREG_TYPE_DWORD значении 0x00010001.

    Для драйверов это значение должно быть равно 7. Это значение эквивалентно побитовой или для EVENTLOG_SUCCESS, EVENTLOG_ERROR_TYPE, EVENTLOG_WARNING_TYPE и EVENTLOG_INFORMATION_TYPE без задания битов EVENTLOG_AUDIT__XXX_.

Раздел event-log-install-section также может использовать директиву DelReg для удаления ранее установленного файла сообщения журнала событий путем явного удаления существующих записей значения EventMessageFile и TypesSupported , если двоичный файл драйвера заменяется только что установленным драйвером. (См. также директиву INF DelService.)

Директива BitReg также допустима вразделеevent-log-install-, определяемом INF-writer, но она почти никогда не используется, так как стандартные записи значений для ведения журнала событий драйвера устройства не являются битами.

Примеры

В этом примере показаны разделы service-install и event-log-install, на которые ссылается директива AddService , как уже показано ранее в примере для DDInstall. Службы.

[Example_DDInstall.Services]
AddService=ExampleFunctionDriver,0x00000002,function_ServiceInstallSection
AddService=ExampleUpperFilter,,filter_ServiceInstallSection

[function_ServiceInstallSection]
DisplayName    = %function_ServiceDesc%
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %13%\ExampleFunctionDriver.sys

[function_EventLogInstallSection]
AddReg = function_EventLog_AddReg

[function_EventLog_AddReg]
;
; Following entry on single line in INF file. Enclosing quotation marks 
; prevent the semicolon from being interpreted as a comment.
;
HKR,,EventMessageFile,0x00020000,"%%SystemRoot%%\System32\IoLogMsg.dll;
       %13%\ExampleFunctionDriver.sys"
HKR,,TypesSupported,0x00010001,7

[filter_ServiceInstallSection]
DisplayName    = %filter_ServiceDesc%
ServiceType    = 1
StartType      = 3
ErrorControl   = 1
ServiceBinary  = %13%\ExampleUpperFilter.sys

[Strings] ; only immediately preceding %strkey% tokens shown here
%function_ServiceDesc%="Example function driver service"
%filter_ServiceDesc%="Example filter driver service"

См. также раздел