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


IOCTL_SERIAL_PURGE IOCTL (ntddser.h)

Запрос IOCTL_SERIAL_PURGE отменяет указанные запросы и удаляет данные из указанных буферов. Запрос на очистку можно использовать для отмены всех запросов на чтение и запись, а также для удаления всех данных из буфера приема и буфера передачи.

Завершение запроса на очистку не означает, что запросы, отмененные запросом на очистку, завершены. Клиент должен убедиться, что очищенные запросы завершены, прежде чем клиент освободит или повторно использует соответствующие IRP.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Элемент AssociatedIrp.SystemBuffer указывает на выделенный клиентом ULONG, который используется для ввода маски очистки. Клиент устанавливает для маски очистки побитовое ИЛИ одного или нескольких следующих флагов очистки:

SERIAL_PURGE_RXABORT

    Очищает все запросы на чтение (IRP_MJ_READ).

SERIAL_PURGE_RXCLEAR

    Очищает буфер приема, если он существует.

SERIAL_PURGE_TXABORT

    Очищает все запросы на запись (IRP_MJ_WRITE).

SERIAL_PURGE_TXCLEAR

    Очищает буфер передачи, если он существует.

Длина входного буфера

Член Parameters.DeviceIoControl.InputBufferLength имеет размер ULONG в байтах.

Выходной буфер

Нет.

Длина выходного буфера

Нет.

Блок состояния

Если запрос выполнен успешно, элементу Information присваивается размер ULONG в байтах. В противном случае элементу Information присваивается нулевое значение.

Для элемента Status задано одно из универсальных значений состояния для запросов управления последовательным устройством. Состояние STATUS_INVALID_PARAMETER указывает, что маска очистки недопустима.

Комментарии

Serial.sys и SerCx позволяют IOCTL_SERIAL_PURGE запросу указать любое сочетание одного или нескольких флагов SERIAL_PURGE_XXX . Однако SerCx2 является более строгим.

SerCx2 требует, чтобы все запросы на чтение были очищены, если буфер приема очищается. Таким образом, если флаг SERIAL_PURGE_RXCLEAR задан в запросе IOCTL_SERIAL_PURGE , то либо очередь запросов ввода-вывода SerCx2 не должна содержать никаких запросов на чтение, либо должен быть установлен флаг SERIAL_PURGE_RXABORT. В противном случае запрос IOCTL_SERIAL_PURGE завершается ошибкой с кодом состояния STATUS_INVALID_DEVICE_STATE.

Аналогичным образом, SerCx2 требует, чтобы все запросы на запись были очищены, если буфер передачи очищается. Таким образом, если флаг SERIAL_PURGE_TXCLEAR задан в запросе IOCTL_SERIAL_PURGE , то либо очередь запросов ввода-вывода SerCx2 не должна содержать никаких запросов на запись, либо должен быть установлен флаг SERIAL_PURGE_TXABORT. В противном случае запрос IOCTL_SERIAL_PURGE завершается ошибкой с кодом состояния STATUS_INVALID_DEVICE_STATE.

Дополнительные сведения о SerCx2, SerCx и Serial.sys см. в статье Обзор драйверов последовательного контроллера.

Требования

Требование Значение
Заголовок ntddser.h (включая Ntddser.h)