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


Интерфейс запроса последовательного ввода-вывода

Для управления периферийным устройством, подключенным к порту на последовательном контроллере, клиентское приложение или драйвер периферийного устройства отправляет запросы ввода-вывода на порт. Клиент использует IRP_MJ_WRITE и IRP_MJ_READ запросы для передачи данных в последовательный порт и получения данных из нее. Кроме того, Windows определяет набор последовательных управляющих запросов ввода-вывода (IOCTL), которые клиент может использовать для настройки последовательного порта.

Последовательные IRP_MJ_XXX-запросы и последовательные ioCTL вместе образуют интерфейс запросов последовательного ввода-вывода, который поддерживается рядом устройств последовательного контроллера. Этот интерфейс поддерживается драйвером Serial.sys, а также сочетанием SerCx2 или SerCx и драйвера последовательного контроллера на основе расширений.

SerCx2, SerCx и Serial.sys поддерживают многие из одинаковых последовательных ioCTL. Однако SerCx2, SerCx и Serial.sys поддерживают различные подмножества IOCTL, указанные в запросах на управление последовательным устройством. В следующей таблице перечислены подмножества ioCTL, поддерживаемые SerCx2, SerCx и Serial.sys. Запись Да в таблице указывает, что расширение или драйвер последовательной платформы поддерживает соответствующий IOCTL, а запись Нет указывает, что это не так.

Последовательный IOCTL SerCx2 SerCx Serial.sys

IOCTL_SERIAL_APPLY_DEFAULT_CONFIGURATION

Да

Да

Нет

IOCTL_SERIAL_CLEAR_STATS

Нет

Да

Да

IOCTL_SERIAL_CLR_DTR

См. примечание 1.

Да

Да

IOCTL_SERIAL_CLR_RTS

Да

Да

Да

IOCTL_SERIAL_CONFIG_SIZE

Нет

Нет

Да

IOCTL_SERIAL_GET_BAUD_RATE

Да

Да

Да

IOCTL_SERIAL_GET_CHARS

См. примечание 2.

Да

Да

IOCTL_SERIAL_GET_COMMSTATUS

Да

Да

Да

IOCTL_SERIAL_GET_DTRRTS

Да

Да

Да

IOCTL_SERIAL_GET_HANDFLOW

См. примечание 1.

Да

Да

IOCTL_SERIAL_GET_LINE_CONTROL

Да

Да

Да

IOCTL_SERIAL_GET_MODEM_CONTROL (см. примечание 4.)

Да

Да

Да

IOCTL_SERIAL_GET_MODEMSTATUS

Нет

Да

Да

IOCTL_SERIAL_GET_PROPERTIES

Да

Да

Да

IOCTL_SERIAL_GET_STATS

Нет

Да

Да

IOCTL_SERIAL_GET_TIMEOUTS

Да

Да

Да

IOCTL_SERIAL_GET_WAIT_MASK

Да

Да

Да

IOCTL_SERIAL_IMMEDIATE_CHAR

Нет

Да

Да

IOCTL_SERIAL_LSRMST_INSERT

Нет

Да

Да

IOCTL_SERIAL_PURGE

Да

Да

Да

IOCTL_SERIAL_RESET_DEVICE (см. примечание 5.)

Нет

Нет

Да

IOCTL_SERIAL_SET_BAUD_RATE

Да

Да

Да

IOCTL_SERIAL_SET_BREAK_OFF

Да

Да

Да

IOCTL_SERIAL_SET_BREAK_ON

Да

Да

Да

IOCTL_SERIAL_SET_CHARS

См. примечание 2.

Да

Да

IOCTL_SERIAL_SET_DTR

См. примечание 1.

Да

Да

IOCTL_SERIAL_SET_FIFO_CONTROL

См. примечание 1.

Да

Да

IOCTL_SERIAL_SET_HANDFLOW (см. примечание 3.)

Да

Да

Да

IOCTL_SERIAL_SET_LINE_CONTROL

Да

Да

Да

IOCTL_SERIAL_SET_MODEM_CONTROL (см. примечание 4.)

Да

Да

Да

IOCTL_SERIAL_SET_QUEUE_SIZE

Да

Да

Да

IOCTL_SERIAL_SET_RTS

Да

Да

Да

IOCTL_SERIAL_SET_TIMEOUTS

Да

Да

Да

IOCTL_SERIAL_SET_WAIT_MASK

Да

Да

Да

IOCTL_SERIAL_SET_XOFF

Нет

Да

Да

IOCTL_SERIAL_SET_XON

Нет

Да

Да

IOCTL_SERIAL_WAIT_ON_MASK

Да

Да

Да

IOCTL_SERIAL_XOFF_COUNTER

Нет

Да

Да

**Заметки**
  1. SerCx2 может поддерживать или не поддерживать этот IOCTL в зависимости от реализации драйвера последовательного контроллера и возможностей оборудования последовательного контроллера.

  2. SerCx2 не поддерживает специальные символы. SerCx2 всегда завершает запрос IOCTL_SERIAL_SET_CHARS с кодом состояния STATUS_SUCCESS, но не задает специальные символы и не выполняет никаких других операций в ответ на этот запрос. Для запроса IOCTL_SERIAL_GET_CHARS SerCx2 присваивает всем символьным значениям в структуре SERIAL_CHARS значение NULL и завершает запрос с кодом состояния STATUS_SUCCESS.

  3. SerCx2 и SerCx поддерживают только подмножества флагов, определенных для элементов FlowReplace и ControlHandShake структуры SERIAL_HANDFLOW . Serial.sys поддерживает все эти флаги. Дополнительные сведения см. в разделе SERIAL_HANDFLOW.

  4. Запросы IOCTL_SERIAL_GET_MODEM_CONTROL и IOCTL_SERIAL_SET_MODEM_CONTROL используются в основном для тестирования оборудования. Для операций управления модемом не определен стандартный макет регистра. Периферийные драйверы, использующие модемы, управляют IOCTL, рискуют сделать себя зависимыми от аппаратных функций конкретного последовательного контроллера.

  5. Драйвер Serial.sys всегда завершает запрос IOCTL_SERIAL_RESET_DEVICE с STATUS_SUCCESS, но не выполняет никаких операций в ответ на этот запрос. SerCx2 и SerCx не поддерживают запросы IOCTL_SERIAL_RESET_DEVICE и всегда заполняют эти запросы STATUS_NOT_IMPLEMENTED.

Дополнительные сведения о запросах IOCTL_SERIAL_XXX , а также о запросах на чтение и запись для последовательных контроллеров см. в заголовке ntddser.h .