在使用单个 PDO 的 MFP 中安装扫描功能

重要

从 WDK for Windows 11 版本 22H2 开始,不再支持 WDF 可再发行组件共同安装程序。 若要了解如何解决此更改,请参阅 WDF 可再发行组件共同安装程序在WDK 已知问题 中不起作用一文。

在只有一个物理设备对象 (PDO) 的多功能打印机中安装扫描功能需要特殊过程。 如果设备将自身标识为打印机,打印机的 INF 文件可以调用 WIA 共同安装程序以安装扫描功能。

Microsoft 建议,如果可能,多功能打印机的每个逻辑功能都应有自己的 PDO。 应避免将设备的多个功能与单个 PDO 相关联。

如果将 WIA 共同安装程序注册为设备的协同安装程序,安装程序始终调用 WIA 共同安装程序,以在打印机类安装程序之前和之后处理安装。 WIA 共同安装程序在打印机的 PDO 上创建 Image 类设备接口,并将所有必需的信息存储在设备接口注册表项中。 此密钥注册表中的当前位置是:

HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses\{6bdd1fc6-810f-11d0-bec7-08002be2092f}\<device 符号链接>

在将来的操作系统版本中,不保证此密钥会保留在此位置。 若要打开此密钥,请调用 SetupDiOpenDeviceInterfaceRegKey

WIA 服务枚举所有 Image 类 PDO 和设备接口。 因此,新创建的设备接口枚举为 WIA 设备。

Windows DDK 附带一个示例 INF,该示例在只有一个 PDO 的多功能打印机中安装扫描功能。 此文件的名称为 mfpoemprn.inf,位于 \src\print\infs 目录中。

在 MFP 中安装扫描功能

  1. sti_ci.dll 指定为 CoInstallerEntry 条目的条目值。

    设备的 INF 必须具有 INF DDInstall.CoInstallers 节 才能注册设备安装共同安装程序。 本部分应类似于以下示例:

    [OEMMFP.GPD.CoInstallers]
    AddReg=WIA.CoInstallers.AddReg
    
    [WIA.CoInstallers.AddReg]
    HKR,,CoInstallers32,0x00010000,"sti_ci.dll, CoInstallerEntry"
    
  2. INF DDInstall 节中包含一个 WIASection 条目,该节引用包含所有 WIA 相关设置的部分。 包含 WIA 相关设置的部分必须出现在同一 INF 文件中。

    [OEMMFP.GPD]
    CopyFiles=@OEMMFP.DLL,@OEMPRT1.DLL,@OEMUI.DLL,OEMMFP.GPD.WIA.CopyFiles
    WIASection=OEMMFP.GPD.WIA
    
    [OEMMFP.GPD.WIA]
    Description=%OEM_MFP_SCANNER%
    SubClass=StillImage
    DeviceType=1
    Capabilities=0x00000011
    AddReg=OEMMFP.GPD.WIA.AddReg
    DeviceData=OEMMFP.GPD.WIA.DeviceData
    ICMProfiles="sRGB Color Space Profile.icm"
    USDClass="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
    

    通过包含 WIASection 条目,映像类安装程序不会为设备创建开发节点,而是创建其他设备接口。 因此,它使用前面提到的设备接口注册表项来存储与 STI/WIA 相关的信息。

  3. 请确保 INF DDInstall 部分 复制所有必需的文件。

    或者,可以列出要在 WIASection 中复制的文件,但它们不会在设备管理器中列出。

包括 ”和 “需要 ”条目不能在 WIASection 节中使用。

所有内核模式部分必须由原始 INF DDInstall 节安装。

如果设备可热插拔,并且需要自己的内核模式组件,则必须创建并启用 Image 类设备接口。 此接口是任何其他类设备接口(如 Print 类设备接口)的补充。

内核模式组件通过调用 IoSetDeviceInterfaceState 函数在设备的开发节点上启用 Image 类设备接口。 启用 Image 类设备接口时,将触发即插即用事件,通知 WIA 服务设备已连接。