Интерфейс запроса последовательного ввода-вывода
Для управления периферийным устройством, подключенным к порту на последовательном контроллере, клиентское приложение или драйвер периферийного устройства отправляет запросы ввода-вывода на порт. Клиент использует 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 |
---|---|---|---|
Да |
Да |
Нет |
|
Нет |
Да |
Да |
|
См. примечание 1. |
Да |
Да |
|
Да |
Да |
Да |
|
Нет |
Нет |
Да |
|
Да |
Да |
Да |
|
См. примечание 2. |
Да |
Да |
|
Да |
Да |
Да |
|
Да |
Да |
Да |
|
См. примечание 1. |
Да |
Да |
|
Да |
Да |
Да |
|
IOCTL_SERIAL_GET_MODEM_CONTROL (см. примечание 4.) |
Да |
Да |
Да |
Нет |
Да |
Да |
|
Да |
Да |
Да |
|
Нет |
Да |
Да |
|
Да |
Да |
Да |
|
Да |
Да |
Да |
|
Нет |
Да |
Да |
|
Нет |
Да |
Да |
|
Да |
Да |
Да |
|
IOCTL_SERIAL_RESET_DEVICE (см. примечание 5.) |
Нет |
Нет |
Да |
Да |
Да |
Да |
|
Да |
Да |
Да |
|
Да |
Да |
Да |
|
См. примечание 2. |
Да |
Да |
|
См. примечание 1. |
Да |
Да |
|
См. примечание 1. |
Да |
Да |
|
IOCTL_SERIAL_SET_HANDFLOW (см. примечание 3.) |
Да |
Да |
Да |
Да |
Да |
Да |
|
IOCTL_SERIAL_SET_MODEM_CONTROL (см. примечание 4.) |
Да |
Да |
Да |
Да |
Да |
Да |
|
Да |
Да |
Да |
|
Да |
Да |
Да |
|
Да |
Да |
Да |
|
Нет |
Да |
Да |
|
Нет |
Да |
Да |
|
Да |
Да |
Да |
|
Нет |
Да |
Да |
SerCx2 может поддерживать или не поддерживать этот IOCTL в зависимости от реализации драйвера последовательного контроллера и возможностей оборудования последовательного контроллера.
SerCx2 не поддерживает специальные символы. SerCx2 всегда завершает запрос IOCTL_SERIAL_SET_CHARS с кодом состояния STATUS_SUCCESS, но не задает специальные символы и не выполняет никаких других операций в ответ на этот запрос. Для запроса IOCTL_SERIAL_GET_CHARS SerCx2 присваивает всем символьным значениям в структуре SERIAL_CHARS значение NULL и завершает запрос с кодом состояния STATUS_SUCCESS.
SerCx2 и SerCx поддерживают только подмножества флагов, определенных для элементов FlowReplace и ControlHandShake структуры SERIAL_HANDFLOW . Serial.sys поддерживает все эти флаги. Дополнительные сведения см. в разделе SERIAL_HANDFLOW.
Запросы IOCTL_SERIAL_GET_MODEM_CONTROL и IOCTL_SERIAL_SET_MODEM_CONTROL используются в основном для тестирования оборудования. Для операций управления модемом не определен стандартный макет регистра. Периферийные драйверы, использующие модемы, управляют IOCTL, рискуют сделать себя зависимыми от аппаратных функций конкретного последовательного контроллера.
Драйвер Serial.sys всегда завершает запрос IOCTL_SERIAL_RESET_DEVICE с STATUS_SUCCESS, но не выполняет никаких операций в ответ на этот запрос. SerCx2 и SerCx не поддерживают запросы IOCTL_SERIAL_RESET_DEVICE и всегда заполняют эти запросы STATUS_NOT_IMPLEMENTED.
Дополнительные сведения о запросах IOCTL_SERIAL_XXX , а также о запросах на чтение и запись для последовательных контроллеров см. в заголовке ntddser.h .