USBPRINT 的程式設計考慮
Usbprint.sys與 USBMON 一起提供與平行印表機所使用的介面非常類似。 在許多情況下,單一印表機驅動程式或語言監視器可以在平行和USB印表機上正常運作,而不需要修改。 如果語言監視器只使用 WritePort 和 ReadPort 函式和 IOCTL_PAR_QUERY_DEVICE_ID 要求,則可在 USB 與平行印表機之間移植。
在某些情況下,語言監視器可能需要對印表機提出廠商特定的要求,才能利用特殊印表機功能。 若要這樣做,請使用 IOCTL_USBPRINT_VENDOR_SET_COMMAND 和 IOCTL_USBPRINT_VENDOR_GET_COMMAND。 不過,請注意,使用這些 IOCTLs 會轉譯與平行埠監視器不相容的語言監視器。
語言監視器通常無法存取其所管理印表機的裝置句柄。 相反地,它們具有埠監視器所提供的埠名稱,該埠名稱位於語言監視器與總線驅動程序之間, (在此案例中 Usbprint.sys) 。 如需詳細資訊,請參閱 語言和埠監視器互動 。 缺少裝置句柄可防止語言監視器直接呼叫裝置總線驅動程式 IOCTL。 為了克服這項限制,USBMON 會實作 GetPrinterDataFromPort API,這可讓語言監視器透過 USBMON 向 USBPRINT 發出 IOCTL。
USB 列印堆疊會與平行列印堆棧共用下列 API 和 IOCTL:
下列 IOCTL 是 USB 列印堆棧特有的:
IOCTL_USBPRINT_VENDOR_GET_COMMAND
IOCTL_USBPRINT_VENDOR_SET_COMMAND
注意
Usbprint.sys 不提供從裝置取得描述元的機制,也不會直接操作USB管道。