INF AddService 指令

注意

此指令不用于安装不需要任何驱动程序的设备(如调制解调器或显示器)的 INF 文件。

AddService 指令在 INF DDInstall 中使用。“服务”部分“INF DefaultInstall.Services”部分。 它指定与驱动程序关联的服务的特征,例如加载服务的方式和时间,以及对其他基础旧驱动程序或服务的任何依赖项。 (可选)此指令还会为设备设置事件日志记录服务。

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

ServiceName
指定要安装的服务的名称。 名称应具有足够唯一性,使其不太可能与其他 INF 文件安装的服务冲突。 例如,服务名称可以包含公司名称的简短缩写作为前缀或后缀。 此名称不得本地化。 无论系统的本地语言如何,它都必须相同。

flag
指定以下系统定义标志的一个或多个 (ORed) (在 Setupapi.h 中定义)以十六进制值表示:

0x00000001 (SPSVCINST_TAGTOFRONT)
将命名服务的 标记移到其组顺序列表的前面,从而确保先在该组 (内加载它,除非随后安装的具有此 INF 规范的设备) 替换它。 以独占方式安装 PnP 设备和具有 WDM 驱动程序的设备的 INF 文件不应设置此标志。

0x00000002 (SPSVCINST_ASSOCSERVICE)
为此 INF 文件安装的设备分配命名服务作为 PnP 函数驱动程序 (或旧版驱动程序) 。

若要指示服务是设备的函数驱动程序,该服务应在 AddService 指令中指定SPSVCINST_ASSOCSERVICE标志。 对于筛选器驱动程序或其他驱动程序组件等服务,不应使用 标志。

每个设备驱动程序 INF 应恰好有一个关联的服务。 如果 INF 是 扩展 INF 或使用 Include/Needs 指令从另一个 INF 继承关联的服务,则 INF 不需要关联的服务。 对于不需要函数驱动程序的设备,可以将 NULL 驱动程序指定为关联的服务,如下所示:

AddService = ,2

0x00000008 (SPSVCINST_NOCLOBBER_DISPLAYNAME)
如果系统中已存在此服务,则不要覆盖给定服务的 (可选) 友好名称。

0x00000010 (SPSVCINST_NOCLOBBER_STARTTYPE)
如果系统中已存在此命名服务,请不要覆盖给定服务的启动类型。

0x00000020 (SPSVCINST_NOCLOBBER_ERRORCONTROL)
如果系统中已存在此命名服务,请不要覆盖给定服务的错误控制值。

0x00000040 (SPSVCINST_NOCLOBBER_LOADORDERGROUP)
如果系统中已存在此命名服务,请不要覆盖给定服务的 load-order-group 值。 以独占方式安装 PnP 设备和具有 WDM 驱动程序的设备的 INF 文件不应设置此标志。

0x00000080 (SPSVCINST_NOCLOBBER_DEPENDENCIES)
如果系统中已存在此命名服务,请不要覆盖给定服务的依赖项列表。 以独占方式安装 PnP 设备和具有 WDM 驱动程序的设备的 INF 文件不应设置此标志。

0x00000100 (SPSVCINST_NOCLOBBER_DESCRIPTION)
如果系统中已存在此服务,则不要覆盖给定服务的 (可选) 说明。

0x00000400 (SPSVCINST_CLOBBER_SECURITY) (Windows XP 及更高版本的 Windows)
如果系统中已存在此服务,请覆盖服务的安全设置。

0x00000800 (SPSVCSINST_STARTSERVICE) (Windows Vista 及更高版本的 Windows)
安装服务后启动服务。 此标志不能用于为设备启动实现即插即用 (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)
如果系统中已存在此服务并且具有现有的 SID 信息,请不要覆盖给定服务的 SID 信息。 有关详细信息,请参阅下面的 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 编写器定义的部分,该节包含用于为此设备安装命名服务的信息 (或设备) 。 有关详细信息,请参阅以下 “备注” 部分。

event-log-install-section
(可选)引用 INF 编写器定义的节,在该节中为此设备 (或) 的设备设置事件日志记录服务。

EventLogType
(可选)指定 “系统”、“ 安全性”“应用程序”之一。 如果省略,则默认为 “系统”,这几乎始终是安装设备驱动程序的合适值。

例如,仅当要安装的驱动程序提供其自己的 安全 支持时,INF 才会指定安全性。

EventName
(可选)指定要用于事件日志的名称。 如果省略,则默认为给定 的 ServiceName

注解

可以将系统定义的不区分大小写的扩展插入到 DDInstall中。包含跨操作系统和/或跨平台 INF 文件中的 AddService 指令的 Services 节,用于指定特定于平台或特定于 OS 的安装。

INF 编写器创建的每个节名称在 INF 文件中必须唯一,并且必须遵循定义节名称的一般规则。 有关这些规则的详细信息,请参阅 INF 文件的一般语法规则

AddService 指令必须引用 INF 文件中其他位置的命名 service-install-section。 每个此类部分具有以下形式:

[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 必须至少有 ServiceTypeStartTypeErrorControlServiceBinary 条目,如下所示。 但是,其余条目是可选的。

Service-Install 节条目和值

DisplayName=名字
为服务/驱动程序指定一个友好名称,通常为便于本地化,表示为 INF 文件的 Strings 节中定义的 %strkey% 标记。

描述=description-string
(可选)指定描述服务的字符串,通常表示为 INF 文件的 Strings 节中定义的 %strkey% 标记。

DisplayName 相比,此字符串为用户提供了有关服务的详细信息。 例如, DisplayName 可能类似于“DHCP 客户端”,说明可能类似于“通过注册和更新 IP 地址和 DNS 名称来管理网络配置”。

description-string 应足够长,足以说明性,但不应长到令人尴尬。 如果 description-string 包含任何 %strkey% 标记,则每个标记最多可以表示 511 个字符。 任何字符串标记替换后的总字符串不应超过 1024 个字符。

ServiceType=type-code
内核模式设备驱动程序的类型代码必须设置为 0x00000001 (SERVICE_KERNEL_DRIVER) 。

为设备安装的 Microsoft Win32 服务 的类型代码 应设置为 0x00000010 (SERVICE_WIN32_OWN_PROCESS) 0x00000020 (SERVICE_WIN32_SHARE_PROCESS) 。 如果 Win32 服务可以与桌面交互,则应将类型代码值与 0x00000100 (SERVICE_INTERACTIVE_PROCESS) 组合在一起。

最高级别的网络驱动程序(如重定向程序或文件系统驱动程序 )的类型代码 应设置为 0x00000002 (SERVICE_FILE_SYSTEM_DRIVER) 。

SERVICE_xxxx常量在 Wdm.hNtddk.h 中定义。

StartType=start-code
指定何时启动驱动程序作为以下数值之一,以十进制或十六进制表示法表示,如以下列表所示。

0x0 (SERVICE_BOOT_START)
指示操作系统加载程序启动的驱动程序。

此值必须用于加载操作系统所需的设备的驱动程序。

0x1 (SERVICE_SYSTEM_START)
指示在操作系统初始化期间启动的驱动程序。

在初始化期间执行设备检测但加载系统不需要的 PnP 驱动程序应使用此值。

例如,还可以检测旧设备的 PnP 驱动程序应在其 INF 中指定此值,以便调用其 DriverEntry 例程来查找旧设备,即使 PnP 管理器无法枚举该设备也是如此。

0x2 (SERVICE_AUTO_START)
指示服务控制管理器在系统启动期间启动的服务。

此值绝不应在 WDM 或 PnP 设备驱动程序的 INF 文件中使用。

0x3 (SERVICE_DEMAND_START)
指示在枚举相应设备时由 PnP 管理器按需启动的服务,也可能由服务控制管理器启动,以响应用户对非 PnP 设备的显式需求。

对于不需要加载系统的设备的所有 WDM 驱动程序,以及加载系统或进行设备检测不需要的所有 PnP 设备驱动程序,应在 INF 文件中使用此值。

0x4 (SERVICE_DISABLED)
指示无法启动的服务。

此值可用于暂时禁用设备的驱动程序服务。 但是,如果在 INF 文件的 service-install 节中指定了此值,则无法安装设备/驱动程序。

有关 StartType 的详细信息,请参阅 指定驱动程序加载顺序

ErrorControl=error-control-level
将错误控制级别指定为以下数值之一,以十进制或十六进制表示法表示,如以下列表所示。

0x0 (SERVICE_ERROR_IGNORE)
如果驱动程序无法加载或初始化,请继续系统启动,并且不会向用户显示警告。

0x1 (SERVICE_ERROR_NORMAL)
如果驱动程序无法加载或初始化其设备,系统启动应继续进行,但向用户显示警告。

0x2 (SERVICE_ERROR_SEVERE)
如果驱动程序无法加载,系统启动应切换到注册表的 LastKnownGood 控制集并继续系统启动,即使驱动程序再次指示加载或设备/驱动程序初始化错误。

0x3 (SERVICE_ERROR_CRITICAL)
如果驱动程序无法加载并且系统启动未使用注册表的 LastKnownGood 控件集,请切换到 LastKnownGood ,然后重试。

如果在使用 LastKnownGood 时启动仍然失败,请运行 bug 检查 例程。 ( 系统启动所需的设备/驱动程序在其 INF 文件中指定此值。)

ServiceBinary=path-to-service
指定服务的二进制文件的路径,表示为 %dirid%\filename

dirid 编号是自定义目录标识符或使用 Dirids 中所述的系统定义的目录标识符之一。 给定 的文件名 指定已传输的文件, (查看从源分发媒体到目标计算机上的该目录的 INF CopyFiles 指令) 。

StartName=service-start-name 此可选条目指定应与服务关联的开始名称。 如果 type-code 指定 1 个 (SERVICE_KERNEL_DRIVER) 或 2 个 (SERVICE_FILE_SYSTEM_DRIVER) ,则此名称是 I/O 管理器用于加载驱动程序的驱动程序对象名称。 如果 type-code 包含位0x00000010 (SERVICE_WIN32_OWN_PROCESS) 0x00000020 (SERVICE_WIN32_SHARE_PROCESS) ,则此名称可以是 CreateService API 的 lpServiceStartName 参数的有效值之一。

AddReg=add-registry-section[add-registry-section]...
引用一个或多个 INF 编写器定义的 add-registry-节 ,其中设置了与新安装的服务相关的任何注册表信息。 有关详细信息,请参阅 INF AddReg 指令

DelReg=del-registry-section[del-registry-section]...
引用一个或多个 INF 编写器定义的 del-registry-sections ,其中已删除已安装服务的相关注册表信息。 有关详细信息,请参阅 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 项指定设备/驱动程序所依赖的服务或加载顺序组的名称。

如果 depend-on-item-name 指定了一个服务,即在启动此驱动程序之前必须运行的服务。 例如,系统提供的 Win32 TCP/IP 打印服务的 INF 取决于底层 (内核模式) TCP/IP 传输堆栈的支持。 因此,TCP/IP 打印服务的 INF 将此项指定为 Dependencies=TCPIP

depend-on-item-name 可以指定此设备/驱动程序所依赖的加载顺序组。 仅当至少启动指定组的一个成员时,才会启动此类驱动程序。 在组名称前面加上加号 (+) 。 例如,系统 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 服务 注册的触发器事件,以便在发生触发器事件时可以启动或停止该服务。 有关服务触发器事件的详细信息,请参阅 服务触发器事件

由 AddTrigger 指令引用的每个命名 service-trigger-install-section 具有以下格式:

[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) 指示从 VHD 启动时应提升驱动程序。

  • 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=trigger-type
在以下数值之一中指定服务触发器事件类型,以十进制或十六进制表示法表示,如以下列表所示:

0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL)
指示当指定设备接口类的设备到达或在系统启动时存在时触发事件。

有关详细信息,请参阅 SERVICE_TRIGGER结构

行动=action-type
指定发生指定触发器事件时要执行的操作。

0x1 (SERVICE_TRIGGER_ACTION_SERVICE_START)
在发生指定的触发器事件时启动服务。

0x2 (SERVICE_TRIGGER_ACTION_SERVICE_STOP)
在发生指定的触发器事件时停止服务。

有关详细信息,请参阅 SERVICE_TRIGGER结构

=trigger-subtype
指定标识触发器事件子类型的 GUID。 该值取决于 TriggerType 的值。

triggerType0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL) 时, SubType 指定标识设备接口类的 GUID。

有关详细信息,请参阅 SERVICE_TRIGGER结构

DataItem=data-type, data
(可选)为服务触发器事件指定特定于触发器的数据。

triggerType0x1 (SERVICE_TRIGGER_TYPE_DEVICE_INTERFACE_ARRIVAL) 时,可以使用 0x2 数据类型指定可选的 DataItem, (SERVICE_TRIGGER_DATA_TYPE_STRING) 将设备接口类的范围限定为特定的硬件 ID 或兼容 ID。

有关详细信息,请参阅 SERVICE_TRIGGER_SPECIFIC_DATA_ITEM结构

使用 AddTrigger 指令的最佳做法是在设备接口到达时触发启动服务。 有关详细信息,请参阅 Win32 服务与设备交互

注意

AddTrigger 语法仅在 Windows 10 版本 2004 和 forward 中可用。

FailureActions=service-failure-actions-install-section
(可选)指定服务控制器在服务失败时应执行的操作。

服务控制管理器计算自系统启动以来每个服务失败的次数。 如果服务在重置期间数秒内未失败,则计数将重置为 0。 当服务第 N 次失败时,服务控制器将执行操作列表的元素 N 中指定的操作。 如果 N 大于操作数,则服务控制器将重复列表中的最后一个操作。

FailureActions 指令引用的 service-failure-actions-install-section 具有以下格式:

[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=reset-period
指定在没有故障的情况下将失败计数重置为零的时间(以秒为单位)。 如果未指定重置期限,则默认情况下不会重置失败计数。

有关详细信息,请参阅 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 开始可用。

指定驱动程序加载顺序

操作系统根据 service-install-sectionStartType 值加载驱动程序,如下所示:

  • 在启动启动阶段,操作系统加载所有 0x0 (SERVICE_BOOT_START) 驱动程序。

  • 在系统启动阶段,操作系统首先加载 PnP 管理器查找设备节点 (开发节点 的所有 WDM 和 PnP 驱动程序,) (其 INF 文件指定 SERVICE_SYSTEM_START 0x01还是为SERVICE_DEMAND_START) 指定 0x03 。 然后,操作系统加载所有剩余SERVICE_SYSTEM_START驱动程序。

  • 在自动启动阶段,操作系统加载所有剩余SERVICE_AUTO_START驱动程序。

有关 依赖项的详细信息,请参阅 指定驱动程序加载顺序

根据启动方案在启动时提升驱动程序的 StartType

根据启动方案,可以使用 BootFlags 注册表值来控制操作系统何时应将驱动程序的 StartType 值提升为0x0 (SERVICE_BOOT_START) 。 可以指定以下数值的一个或多个 (ORed) ,以十六进制值表示:

  • 0x1 (CM_SERVICE_NETWORK_BOOT_LOAD) 指示如果从网络启动,则应提升驱动程序。

  • 0x2 (CM_SERVICE_VIRTUAL_DISK_BOOT_LOAD) 指示如果从 VHD 启动,则应提升驱动程序。

  • 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 指令还可以引用 INF 文件中的其他位置的 event-log-install-section。 每个此类部分具有以下形式:

[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-节 仅使用 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的按位 OR,而无需设置EVENTLOG_AUDIT__XXX_位。

如果新安装的驱动程序取代了驱动程序二进制文件, 则 event-log-install-section 还可以使用 DelReg 指令通过显式删除现有 EventMessageFileTypesSupported 值条目来删除以前安装的事件日志消息文件。 (另请参阅 INF DelService 指令.)

虽然 BitReg 指令在 INF 编写器定义的 event-log-install-部分中也有效,但它几乎永远不会使用,因为设备驱动程序事件日志记录的标准值条目不是位掩码。

示例

此示例显示 AddService 指令引用的 service-install 和 event-log-install 部分,如前面针对 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"

另请参阅