USBPRINT.SYS 生成的标识符

从 Windows 2000 开始,操作系统提供内核模式 USB 打印驱动程序 ,usbprint.sys 将打印机子系统连接到 USB 堆栈。 本机 USB 打印机驱动程序可让供应商无需开发自己的内核模式 USB 打印机驱动程序。 这样,供应商就可以开发适用于 USB 和并行打印机的高级用户模式打印机驱动程序。

usbprint.inf 安装文件包含与所有 USB 类 7 打印机设备匹配的兼容 ID。 如果 USB 中心驱动程序枚举这些设备之一,操作系统会在 usbprint.inf 中查找中心驱动程序生成的 ID 的匹配项,并将加载 USB 打印机驱动程序 ,usbprint.sys在 usbprint.inf 中找到的兼容 ID 具有以下形式:

USB\CLASS_07

其中:

  • class 07h = 属于 USB 打印机类的设备

加载后,USB 打印机驱动程序会为打印机设备创建新的 PDO。 当即插即用 (PnP) 管理器查询新创建的 PDO 的设备标识字符串时,USB 打印机驱动程序会创建一个新的硬件 ID,该 ID 派生自设备的 IEEE 1284 字符串,该字符串与并行总线枚举器生成的字符串标识符兼容。 此硬件 ID 具有以下格式:

USBPRINT\NameModel (20) 校验和 (4)

其中:

  • NameModel (20) 是制造商名称和设备型号的串联,最多可截断为 20 个字符。

  • 校验和 (4) 是一个 4 个字符的循环冗余,检查 (CRC) 代码根据制造商名称和型号名称计算。

字符串中的空格将替换为下划线。 例如,如果制造商名称为“Hewlett-Packard”,型号名称为“HP Color LaserJet 550”,校验和为 3115,则硬件 ID 如下所示:

USBPRINT\Hewlett-PackardHP_Co3115

在前面的示例中,模型名称中的“HP”和“Color”之间的空格被替换为下划线,以生成截断的 make/model 字符串“Hewlett-PackardHP_Co”。

注意 操作系统生成的 CRC 可能与上一节中计算的 CRC 或任何其他 CRC 算法不匹配。 因此,打印机驱动程序可能无法计算要与打印机驱动程序的 INF 文件一起使用的正确 hardwareID。 若要检索 hardwareID,最好搜索与所安装的 USB 打印机关联的 setupapi.dev.log 文件。