在 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