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 文件。