IOCTL_SERIAL_PURGE IOCTL (ntddser.h)
Запрос IOCTL_SERIAL_PURGE отменяет указанные запросы и удаляет данные из указанных буферов. Запрос на очистку можно использовать для отмены всех запросов на чтение и запись запросов, а также для удаления всех данных из буфера получения и буфера передачи.
Завершение запроса очистки не указывает, что запросы, отмененные запросом очистки, завершены. Клиент должен убедиться, что удаленные запросы завершаются до освобождения клиента или повторного использования соответствующих IRP.
Основной код
Входной буфер
Элемент 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. В противном случае элемент сведений равен нулю.
Элемент состояния имеет одно из универсальных значений состояния для запросов последовательного управления устройствами. Состояние 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 (include Ntddser.h) |