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


Коды основных функций последовательного 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:

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

Правила обработки power IRP

Руководство по проектированию драйвера последовательного контроллера