USBPRINT 的编程注意事项

Usbprint.sys与 USBMON 一起提供与并行打印机使用的接口非常相似。 在许多情况下,单个打印机驱动程序或语言监视器可以在并行打印机和 USB 打印机上正常运行,而无需修改。 如果语言监视器仅使用 WritePortReadPort 函数以及 IOCTL_PAR_QUERY_DEVICE_ID 请求,它将在 USB 和并行打印机之间移植。

在某些情况下,语言监视器可能需要向打印机发出供应商特定的请求,以便利用特殊的打印机功能。 为此,请使用 IOCTL_USBPRINT_VENDOR_SET_COMMANDIOCTL_USBPRINT_VENDOR_GET_COMMAND。 但请注意,使用这些 IOCTL 会使语言监视器与并行端口监视器不兼容。

语言监视器通常无权访问其所管理的打印机的设备句柄。 相反,它们的端口名称由位于语言监视器和总线驱动程序之间的端口监视器 提供,在本 例中)Usbprint.sys(。 有关详细信息 ,请参阅语言和端口监视器交互 。 缺少设备句柄会阻止语言监视器直接调用设备总线驱动程序 IOCTL。 为了克服此限制,USBMON 实现了 GetPrinterDataFromPort API,该 API 允许语言监视器通过 USBMON 向 USBPRINT 发出 IOCTL。

USB 打印堆栈与并行打印堆栈共享以下 API 和 IOCTL:

WritePort

ReadPort

IOCTL_PAR_QUERY_DEVICE_ID

以下 IOCTL 特定于 USB 打印堆栈:

IOCTL_USBPRINT_GET_1284_ID

IOCTL_USBPRINT_GET_LPT_STATUS

IOCTL_USBPRINT_SOFT_RESET

IOCTL_USBPRINT_VENDOR_GET_COMMAND

IOCTL_USBPRINT_VENDOR_SET_COMMAND

注意

Usbprint.sys 不提供从设备获取描述符或直接操作 USB 管道的机制。