Коды основных функций последовательного IRP
В этом разделе описаны коды основных функций последовательного IRP.
Заголовок: Wdm.h (включая Wdm.h или Ntddk.h)
IRP_MJ_CREATE
Запрос IRP_MJ_CREATE открывает последовательное устройство.
При отправке
Клиент должен открыть последовательное устройство, прежде чем оно сможет получить доступ к порту или устройство, подключенное к порту.
Входные параметры
Отсутствует.
Параметры вывода
Нет.
Блок состояния ввода-вывода
Для поля Сведения задано значение ноль.
Для поля Состояние задано одно из следующих значений:
Значение состояния | Описание |
---|---|
STATUS_SUCCESS | Последовательное устройство было успешно открыто. |
STATUS_ACCESS_DENIED | Устройство уже открыто. |
STATUS_DELETE_PENDING | Serial находится в процессе удаления устройства. |
STATUS_INSUFFICIENT_RESOURCES | Устройство не находится в состоянии Plug and Play Запущено, или драйверу не удалось выделить внутреннюю структуру данных. |
STATUS_NOT_A_DIRECTORY | Последовательное устройство не может быть открыто как каталог. |
STATUS_PENDING | Последовательный выставить запрос в очередь для последующей обработки. |
STATUS_SHARED_IRQ_BUSY | Прерывание, назначенное устройству, используется другим открытым устройством. |
Операция
Перед использованием необходимо открыть последовательное устройство. Последовательное устройство — это монопольное устройство; В любой момент времени на порте может быть открыт только один файл.
IRP_MJ_DEVICE_CONTROL
Запрос IRP_MJ_DEVICE_CONTROL работает с последовательным портом.
При отправке
Клиент использует запросы управления устройствами для выполнения:
- Получение сведений о порте
- Получение и настройка регистров
- Получение и установка режимов работы
Описание запросов управления устройствами, поддерживаемых Serial, см. в заголовке ntddser.h .
Входные параметры
Конкретный запрос
Параметры вывода
Конкретный запрос
Блок состояния ввода-вывода
Конкретный запрос
Операция
Конкретный запрос
IRP_MJ_FLUSH_BUFFERS
Запрос IRP_MJ_FLUSH_BUFFER очищает внутренний буфер записи последовательного устройства.
При отправке
Клиент использует запрос на очистку, чтобы определить, когда serial выполнил все запросы на запись, отправленные клиентом перед запросом на очистку.
Входные параметры
Нет.
Параметры вывода
Нет.
Блок состояния ввода-вывода
Элемент Information имеет нулевое значение.
Для элемента Status задано одно из следующих значений состояния:
Значение состояния | Описание |
---|---|
STATUS_SUCCESS | Запрос успешно завершен. |
STATUS_CANCELLED | Клиент отменил запрос. Последовательный также отменяет запрос при возникновении ошибки устройства, а serial настраивается для отмены запроса в случае ошибки устройства. |
STATUS_DELETE_PENDING | Драйвер находится в процессе удаления устройства. |
STATUS_PENDING | Последовательный выставить запрос в очередь для последующей обработки. |
Операция
Последовательно помещает в очередь и начинает обработку запросов на запись и очистку в порядке их получения. Serial завершает запрос на очистку после вызова IoCompleteRequest для всех запросов на запись, полученных до запроса на очистку. Однако выполнение запроса на очистку не означает, что все ранее запущенные запросы на запись выполняются другими драйверами в стеке устройств. Например, драйвер фильтра может по-прежнему обрабатывать запрос на запись. Клиент должен проверка, что запрос на запись выполнен всеми драйверами в стеке устройств, прежде чем клиент попытается освободить или повторно использовать IRP запроса на запись.
IRP_MJ_INTERNAL_DEVICE_CONTROL
Запрос IRP_MJ_INTERNAL_DEVICE_CONTROL задает внутренние режимы работы на последовательном устройстве.
При отправке
Клиент использует внутренние запросы управления устройствами для выполнения:
- Получение и сброс основных параметров
- Управление операцией ожидания и пробуждения
Описание внутренних запросов управления устройствами см. в заголовке ntddser.h .
Входные параметры
Конкретный запрос
Параметры вывода
Конкретный запрос
Блок состояния ввода-вывода
Конкретный запрос
Операция
Конкретный запрос
IRP_MJ_PNP
Запрос IRP_MJ_PNP поддерживает Plug and Play.
При отправке
Диспетчер PnP отправляет IRP_MJ_PNP запросы на запросы устройств, а также на запуск, остановку и удаление устройств.
Входные параметры
Конкретный запрос
Параметры вывода
Конкретный запрос
Блок состояния ввода-вывода
Конкретный запрос
Операция
Serial поддерживает следующие запросы Plug and Play:
- IRP_MN_CANCEL_REMOVE_DEVICE
- IRP_MN_CANCEL_STOP_DEVICE
- IRP_MN_FILTER_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_CAPABILITIES
- IRP_MN_QUERY_DEVICE_RELATIONS
- IRP_MN_QUERY_ID
- IRP_MN_QUERY_PNP_DEVICE_STATE
- IRP_MN_QUERY_REMOVE_DEVICE
- IRP_MN_QUERY_RESOURCE_REQUIREMENTS
- IRP_MN_QUERY_STOP_DEVICE
- IRP_MN_REMOVE_DEVICE
- IRP_MN_START_DEVICE
- IRP_MN_STOP_DEVICE
- IRP_MN_SURPRISE_REMOVAL
Serial отправляет все остальные запросы Plug and Play в стек устройств без дальнейшей обработки.
Serial выполняет следующую последовательную обработку для запросов Plug and Play:
IRP_MN_QUERY_ID (тип BusQueryHardwardIDs)
Если последовательное устройство находится на многопортовом карта ISA, serial добавляет строку с широкими символами "*PNP0502" к строке идентификаторов оборудования.
IRP_MN_FILTER_RESOURCE_REQUIREMENTS
Последовательные устройства на многопортовом isa карта используют один и тот же регистр состояния прерывания и одно и то же прерывание.
Описание универсальной операции запросов Plug and Play см. в разделе Plug and Play дополнительных irP.
IRP_MJ_POWER
Запрос IRP_MJ_POWER управляет управлением питанием.
При отправке
Диспетчер питания использует запросы питания для запроса и настройки состояний питания.
Входные параметры
Конкретный запрос
Параметры вывода
Конкретный запрос
Блок состояния ввода-вывода
Конкретный запрос
Операция
Serial поддерживает следующие запросы на питание:
Serial отправляет все остальные запросы на питание в стек устройств для выполнения драйвером более низкого уровня.
Serial является владельцем политики питания по умолчанию для стека последовательных устройств, который использует Serial в качестве драйвера функции или драйвера фильтра более низкого уровня.
Дополнительные сведения об универсальной операции этих запросов см. в разделе Правила для обработки power IRP.
IRP_MJ_QUERY_INFORMATION
Запрос IRP_MJ_QUERY_INFORMATION запрашивает сведения о конце файла для серийного устройства.
При отправке
Клиент использует запрос сведений о запросе для получения стандартных сведений и сведений о расположении файла, открытого на серийном устройстве.
Входные параметры
Параметр Parameters.QueryFile.FileInformationClass имеет значение FileStandardInformation или FilePositionInformation.
Параметры вывода
Параметр | Описание |
---|---|
FileStandardInformation | Элемент AssociatedIrp.SystemBuffer указывает на структуру, выделенную клиентом FILE_STANDARD_INFORMATION, которую Serial использует для вывода стандартных сведений. |
FilePositionInformation | Элемент AssociatedIrp.SystemBuffer указывает на структуру, выделенную клиентом FILE_POSITION_INFORMATION, которую Serial использует для вывода сведений о положении. |
Блок состояния ввода-вывода
Если запрос выполнен успешно, элементу Information присваивается нулевое значение.
Для элемента Status задано одно из следующих значений состояния:
Значение состояния | Описание |
---|---|
STATUS_SUCCESS | Запрос успешно выполнен. |
STATUS_CANCELLED | Клиент отменил запрос. Serial также отменяет запрос при возникновении ошибки устройства, а serial настроен для отмены запроса при возникновении ошибки устройства. |
STATUS_DELETE_PENDING | Serial находится в процессе удаления устройства. |
STATUS_INVALID_PARAMETER | Запрошенные сведения не поддерживаются. |
STATUS_PENDING | Последовательная постановка запроса в очередь для последующей обработки. |
Операция
Serial поддерживает запросы типов FileStandardInformation и FilePositionInformation.
Стандартные сведения о файле всегда равны нулю или FALSE, если это необходимо. Сведения о положении всегда равны нулю.
IRP_MJ_READ
Запрос IRP_MJ_READ передает данные с последовательного устройства клиенту.
При отправке
Клиент использует запрос на чтение всякий раз, когда он считывает данные на последовательном устройстве.
Входные параметры
Для элемента Parameters.Read.Length задано количество байтов для передачи в буфер чтения клиента.
Параметры вывода
Член AssociatedIrp.SystemBuffer указывает на выделенный клиентом буфер чтения, в который последовательный копирует данные, считываемые на последовательном устройстве.
Блок состояния ввода-вывода
Для элемента Information задано количество байтов, передаваемых в буфер чтения клиента.
Для элемента Status задано одно из следующих значений:
Значение состояния | Описание |
---|---|
STATUS_SUCCESS | Запрос успешно выполнен. |
STATUS_CANCELLED | Клиент отменил запрос. Serial также отменяет запрос при возникновении ошибки устройства, а serial настроен для отмены запроса при возникновении ошибки устройства. |
STATUS_DELETE_PENDING | Serial находится в процессе удаления устройства. |
STATUS_PENDING | Последовательный выставить запрос в очередь для последующей обработки. |
STATUS_TIMEOUT | Время выполнения запроса превысило общее время ожидания или время ожидания интервала. |
Операция
Клиент может использовать события времени ожидания для завершения запроса на чтение. Обратите внимание, что при открытии последовательного устройства параметры времени ожидания для устройства не определены. Клиент в режиме ядра может использовать IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS для установки параметров времени ожидания равным нулю (события времени ожидания не используются). Клиенты в режиме пользователя и режиме ядра могут использовать запрос IOCTL_SERIAL_SET_TIMEOUTS для задания параметров времени ожидания.
Дополнительные сведения о времени ожидания чтения и записи см. в разделе Настройка времени ожидания чтения и записи для серийного устройства.
IRP_MJ_SET_INFORMATION
Запрос IRP_MJ_SET_INFORMATION задает сведения о конце файла о последовательном устройстве.
При отправке
Клиент использует запрос сведений о наборе для изменения текущей позиции в конце файла, открытого на последовательном устройстве.
Входные параметры
Элемент Parameters.SetFile.FileInformationClass имеет значение FileEndOfFileInformation или FileAllocationInformation.
Параметры вывода
Нет.
Блок состояния ввода-вывода
Если запрос выполнен успешно, для элемента Information устанавливается нулевое значение.
Для элемента Status задано одно из следующих значений состояния:
Значение состояния | Описание |
---|---|
STATUS_SUCCESS | Запрос успешно завершен. |
STATUS_CANCELLED | Клиент отменил запрос. Последовательный также отменяет запрос при возникновении ошибки устройства, а serial настраивается для отмены запроса в случае ошибки устройства. |
STATUS_DELETE_PENDING | Serial находится в процессе удаления устройства. |
STATUS_INVALID_PARAMETER | Указанные сведения о конце файла не поддерживаются. |
STATUS_PENDING | Последовательный выставить запрос в очередь для последующей обработки. |
Операция
Serial поддерживает запросы типов FileEndOfFileInformation и FileAllocationInformation. Однако serial фактически не устанавливает сведения о файле. Позиция конца файла всегда равна нулю.
IRP_MJ_SYSTEM_CONTROL
Запрос IRP_MJ_SYSTEM_CONTROL поддерживает запросы WMI.
При отправке
Компонент режима ядра WMI может отправлять запрос IRP_MJ_SYSTEM_CONTROL в любое время после регистрации serial в качестве поставщика WMI для последовательного устройства. WMI IRP обычно отправляются, когда потребитель данных пользовательского режима запросил данные WMI.
Входные параметры
Конкретный запрос
Параметры вывода
Конкретный запрос
Блок состояния ввода-вывода
Для запросов WMI serial задает для поля Состояние одно из следующих значений:
Значение состояния | Описание |
---|---|
STATUS_SUCCESS | Запрос успешно завершен. |
STATUS_BUFFER_TOO_SMALL | Размер выходного буфера в байтах меньше требуемого размера запрошенной информации. |
STATUS_INSUFFICIENT_RESOURCES | Недостаточно системных ресурсов для сохранения имени последовательного порта. |
STATUS_INVALID_DEVICE_REQUEST | Недопустимый запрос. |
STATUS_WMI_GUID_NOT_FOUND | Идентификатор GUID WMI не поддерживается. |
Операция
Serial использует WmiSystemControl для обработки запросов управления системой WMI. Serial регистрирует следующие типы процедур обратного вызова библиотеки WMI, которые WmiSystemControl вызывает для обработки запросов WMI, отправленных на устройство:
Serial не поддерживает другие запросы системного управления. Для запросов, отличных от WMI, Serial пропускает текущее расположение стека и отправляет запрос вниз по стеку устройств.
Последовательный регистрирует GUID WMI, описанные в следующей таблице.
Структура данных, связанная с guid последовательного WMI
SERIAL_PORT_WMI_NAME_GUID | USHORT, за которым следует WCSTR |
---|---|
SERIAL_PORT_WMI_COMM_GUID | SERIAL_WMI_COMM_DATA |
SERIAL_PORT_WMI_HW_GUID | SERIAL_WMI_HW_DATA |
SERIAL_PORT_WMI_PERF_GUID | SERIAL_WMI_PERF_DATA |
SERIAL_PORT_WMI_PROPERTIES_GUID | WMI_SERIAL_PORT_PROPERTIES |
WMI-имя последовательного устройства — это значение параметра PortName в разделе реестра Plug and Play для устройства.
IRP_MJ_WRITE
Запрос IRP_MJ_WRITE передает данные от клиента к последовательному устройству.
При отправке
Клиент использует запрос на запись при записи данных на последовательное устройство.
Входные параметры
Для элемента Parameters.Write.Length задано количество байтов для копирования из выделенного клиентом буфера записи на последовательное устройство.
Член AssociatedIrp.SystemBuffer указывает на выделенный клиентом буфер записи, из которого последовательный сервер копирует данные на устройство.
Параметры вывода
Нет.
Блок состояния ввода-вывода
Для элемента Information задается количество байтов, фактически скопированных из буфера записи клиента на последовательное устройство.
Для элемента Status задано одно из следующих значений:
Значение состояния | Описание |
---|---|
STATUS_SUCCESS | Запрос успешно завершен. |
STATUS_CANCELLED | Клиент отменил запрос. Serial также отменяет запрос при возникновении ошибки устройства, а serial настроен для отмены запроса при возникновении ошибки устройства. |
STATUS_DELETE_PENDING | Serial находится в процессе удаления устройства. |
STATUS_PENDING | Последовательная постановка запроса в очередь для последующей обработки. |
STATUS_TIMEOUT | Превышено общее время, разрешенное для запроса на запись. |
Операция
Клиент может использовать события времени ожидания для завершения запроса на запись. Однако обратите внимание, что при открытии последовательного устройства события времени ожидания, установленные на устройстве, не определены. Клиент в режиме ядра может использовать IOCTL_SERIAL_INTERNAL_BASIC_SETTINGS для задания параметров времени ожидания равным нулю (события времени ожидания не используются) и IOCTL_SERIAL_SET_TIMEOUTS запроса на настройку параметров времени ожидания. Дополнительные сведения о времени ожидания чтения и записи см. в разделе Настройка времени ожидания чтения и записи для последовательного устройства.
Связанные темы
Plug and Play дополнительные irp
Руководство по проектированию драйвера последовательного контроллера
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по