在 INF 文件中指定反射器

从 Windows 11 开始,将反射器 (WUDFRd.sys) 添加到内核模式设备堆栈的建议方法是在 UMDF 驱动程序的 INF 文件中引用系统提供的 WudfRd.inf 文件。

注意

WudfRd.inf 仅包含在 Windows 11 及更高版本中。

在 Windows 10 及更早版本中,若要添加反射器 (WUDFRd.sys) ,UMDF 驱动程序的 INF 文件必须在 INF DDInstall.Services 部分以及 service-install-section 中包含 AddService 指令。 虽然此方法仍适用于Windows 11及更高版本,但不建议这样做。

在这两种方法中,反射器可以是上部筛选器、下部筛选器或设备的服务,具体取决于用户模式堆栈的配置。

引用 WudfRd.inf (Windows 11 及更高版本)

可以在 echoum.inx 中找到使用此技术的示例 INF。 或者,使用以下代码片段之一。

若要安装 WudfRd 服务作为设备的函数驱动程序,请执行以下操作:

[DDInstall]
Include=WUDFRD.inf
Needs=WUDFRD.NT
; also include any existing DDInstall directives

[DDInstall.HW]
Include=WUDFRD.inf
Needs=WUDFRD.NT.HW
; also include any existing DDInstall.HW directives

[DDInstall.Services]
Include=WUDFRD.inf
Needs=WUDFRD.NT.Services
; also include any existing any DDInstall.Services directives

将 WudfRd 服务安装为上层筛选器驱动程序:

[DDInstall] 
Include=WUDFRD.inf
Needs=WUDFRD_UpperFilter.NT
; also include any existing DDInstall directives

[DDInstall.HW]
Include=WUDFRD.inf
Needs=WUDFRD_UpperFilter.NT.HW
; also include any existing DDInstall.HW directives

[DDInstall.Services]
Include=WUDFRD.inf
Needs=WUDFRD_UpperFilter.NT.Services
; also include any existing any DDInstall.Services directives

[DDInstall.Filters]
Include=WUDFRD.inf
Needs=WUDFRD_UpperFilter.NT.Filters

若要将 WudfRd 服务安装为较低筛选器驱动程序,请执行以下操作:

[DDInstall] 
Include=WUDFRD.inf
Needs=WUDFRD_LowerFilter.NT
; also include any existing DDInstall directives

[DDInstall.HW]
Include=WUDFRD.inf
Needs=WUDFRD_LowerFilter.NT.HW
; also include any existing DDInstall.HW directives

[DDInstall.Services]
Include=WUDFRD.inf
Needs=WUDFRD_LowerFilter.NT.Services
; also include any existing any DDInstall.Services directives

[DDInstall.Filters]
Include=WUDFRD.inf
Needs=WUDFRD_LowerFilter.NT.Filters

使用 AddService 指令 (Windows 10及更早的)

下面的代码示例演示 UMDF 函数驱动程序的 INF 文件如何添加反射器。

[Skeleton_Install.Services]
AddService=WUDFRd,0x000001fa,WUDFRD_ServiceInstall

在此示例中,驱动程序将 ORed (0x2 (SPSVCINST_ASSOCSERVICE) 标志指定到上面的 flags 参数中,) 将反射器指定为内核模式设备堆栈中的函数驱动程序。

AddService 指令还设置0x000001f8标志,以防止覆盖服务的任何预先存在的配置。 有关这些标志的详细信息,请参阅 AddService 指令flags 参数。

以下代码示例取自 WUDFVhidmini 示例,演示了 UMDF 筛选器驱动程序的 AddService 指令。

[hidumdf.win8.NT.Services]
AddService=WUDFRd,0x000001f8,WUDFRD_ServiceInstall  
AddService=mshidumdf, 0x000001fa, mshidumdf.AddService

[WudfVhidmini_AddReg]
HKR,,"LowerFilters",0x00010008,"WUDFRd" ; FLG_ADDREG_TYPE_MULTI_SZ | FLG_ADDREG_APPEND

在这种情况下,mshidumdf 服务与设备堆栈的 FDO 相关联,反射器是较低的筛选器。

提供 service-install-section

AddService 指令引用类似于以下代码示例的 service-install-section。 ServiceType 条目指定 1 或 0x00000001,指示 INF 安装对一个或多个设备的支持。 StartType 条目指定何时启动驱动程序。 ErrorControl 条目指定驱动程序提供的错误控制级别。 ServiceBinary 条目指定服务反射器) (二进制文件的路径。

[WUDFRD_ServiceInstall]
DisplayName = "Windows Driver Frameworks - User-mode Driver Framework Reflector"
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%12%\WUDFRd.sys