Рекомендации по программированию для USBPRINT
Usbprint.sysвместе с USBMON предоставляет интерфейс, очень похожий на интерфейс, используемый параллельными принтерами. Во многих случаях один драйвер принтера или языковой монитор могут правильно работать как на параллельных, так и на USB-принтерах без изменений. Если языковой монитор использует только функции WritePort и ReadPort и запрос IOCTL_PAR_QUERY_DEVICE_ID , он будет переноситься между USB и параллельными принтерами.
В некоторых случаях может потребоваться, чтобы языковой монитор мог выполнять запросы к принтеру для конкретного поставщика, чтобы воспользоваться преимуществами специальных функций принтера. Для этого используйте IOCTL_USBPRINT_VENDOR_SET_COMMAND и IOCTL_USBPRINT_VENDOR_GET_COMMAND. Однако обратите внимание, что при использовании этих списков IOCTL отображается языковой монитор, несовместимый с монитором параллельных портов.
Языковые мониторы обычно не имеют доступа к дескриптору устройства для принтера, который они управляют. Вместо этого у них есть имя порта, предоставленное монитором портов, который находится между языковым монитором и водителем автобуса ( в данном случаеUsbprint.sys). Дополнительные сведения см. в статье Взаимодействие с монитором языков и портов . Отсутствие дескриптора устройства не позволяет языковым мониторам напрямую вызывать ioCTL драйвера шины устройства. Чтобы преодолеть это ограничение, USBMON реализует API GetPrinterDataFromPort , который позволяет языковым мониторам выдавать списки IOCTL через USBMON в USBPRINT.
Стек печати USB использует следующие API и IOCTL с параллельным стеком печати:
Следующие ioCTL относятся к стеку печати USB:
IOCTL_USBPRINT_VENDOR_GET_COMMAND
IOCTL_USBPRINT_VENDOR_SET_COMMAND
Примечание
Usbprint.sys не предоставляет механизма для получения дескрипторов с устройства и для непосредственного управления USB-каналами.