IOCTL_SERIAL_SET_WAIT_MASK IOCTL (ntddser.h)
Запрос IOCTL_SERIAL_SET_WAIT_MASK настраивает драйвер последовательного контроллера для уведомления клиента после возникновения любого из указанного набора событий ожидания.
Клиент может ожидать событий ожидания, представленных битами флагов, SERIAL_EV_RXCHAR через SERIAL_EV_EVENT2. Дополнительные сведения об этих флагах событий см. в разделе "Примечания".
Клиент указывает события ожидания, задав маску ожидания входного события на побитовую или одну или несколько флагов событий. Клиент может очистить все события ожидания, задав маску ожидания входного события нулю.
Клиент использует запрос IOCTL_SERIAL_WAIT_ON_MASK для ожидания возникновения события ожидания. Если запрос ожидания по маске уже ожидается при обработке запроса set-wait-mask, ожидающий запрос на событие ожидания завершается с состоянием STATUS_SUCCESS, а для маски события ожидания выходных данных задано нулевое значение.
Основной код
Входной буфер
Элемент AssociatedIrp.SystemBuffer указывает на буфер ULONG, который клиент выделяет и задает маску ожидания события. Маска ожидания имеет значение нулю или битовое значение ИЛИ одного или нескольких битов SERIAL_EV_XXX флагов.
Длина входного буфера
Элемент Parameters.DeviceIoControl.InputBufferLength имеет размер в байтах ULONG.
Выходной буфер
Никакой.
Длина выходного буфера
Никакой.
Блок состояния
Элемент Information имеет значение нулю.
Элемент состояния имеет одно из универсальных значений состояния для запросов последовательного управления устройствами. Состояние STATUS_INVALID_PARAMETER указывает, что маска ожидания входных данных недопустима.
Замечания
Константы SERIAL_EV_XXX определяют биты флагов в маске ожидания для последовательного порта.
#define SERIAL_EV_RXCHAR 0x0001 #define SERIAL_EV_RXFLAG 0x0002 #define SERIAL_EV_TXEMPTY 0x0004 #define SERIAL_EV_CTS 0x0008 #define SERIAL_EV_DSR 0x0010 #define SERIAL_EV_RLSD 0x0020 #define SERIAL_EV_BREAK 0x0040 #define SERIAL_EV_ERR 0x0080 #define SERIAL_EV_RING 0x0100 #define SERIAL_EV_PERR 0x0200 #define SERIAL_EV_RX80FULL 0x0400 #define SERIAL_EV_EVENT1 0x0800 #define SERIAL_EV_EVENT2 0x1000
Константы SERIAL_EV_XXX определяют типы событий, которые можно указать в маске ожидания. После того как клиент (приложение или периферийный драйвер) открывает подключение к последовательному порту, клиент может указать маску ожидания, которая указывает типы событий, которые клиент должен отслеживать. Эти события изменяются в состоянии оборудования последовательного порта. Когда происходит событие в маске ожидания, клиент уведомляется.
Запросы IOCTL_SERIAL_SET_WAIT_MASK и IOCTL_SERIAL_GET_WAIT_MASK управления используют маски ожидания событий, чтобы указать набор событий, в которых клиент может ждать. Значение маски ожидания равно нулю или побитовой или одной или нескольких констант SERIAL_EV_XXX. Значение маски ожидания равно нулю указывает, что клиент не ожидает каких-либо событий.
Клиент отправляет запрос элемента управления IOCTL_SERIAL_WAIT_ON_MASK, чтобы ждать события в текущей маске ожидания. Драйвер последовательного контроллера завершает этот запрос при возникновении события в маске ожидания.
В следующей таблице показано, какие биты флагов XXX SERIAL_EV_ поддерживаются SerCx2, SerCx и Serial.sys. Запись Да в таблице указывает, что расширение или драйвер последовательной платформы поддерживает соответствующий бит флага. Запись No указывает, что бит флага не поддерживается.
Бит флага | SerCx2 | SerCx | Serial.sys |
---|---|---|---|
SERIAL_EV_RXCHAR | Да | Да | Да |
SERIAL_EV_RXFLAG | См. примечание. | Нет | Да |
SERIAL_EV_TXEMPTY | Да | Да | Да |
SERIAL_EV_CTS | Да | Да | Да |
SERIAL_EV_DSR | Да | Да | Да |
SERIAL_EV_RLSD | См. примечание. | Да | Да |
SERIAL_EV_BREAK | Да | Да | Да |
SERIAL_EV_ERR | Да | Да | Да |
SERIAL_EV_RING | См. примечание. | Да | Да |
SERIAL_EV_PERR | См. примечание. | Нет | Нет |
SERIAL_EV_RX80FULL | См. примечание. | Нет | Да |
SERIAL_EV_EVENT1 | См. примечание. | Нет | Нет |
SERIAL_EV_EVENT2 | См. примечание. | Нет | Нет |
Требования
Требование | Ценность |
---|---|
заголовка | ntddser.h (include Ntddser.h) |