Поделиться через


Рекомендации по программированию для 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 с параллельным стеком печати:

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-каналами.