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


IRP_MN_WRITE_CONFIG

Водители автобусов с пространством конфигурации должны обрабатывать этот запрос для своих дочерних устройств (дочерних PDO). Драйверы функций и фильтров не обрабатывают этот запрос.

Значение

0x10

Основной код

IRP_MJ_PNP

При отправке

Драйвер или другой системный компонент отправляет этот IRP для записи данных в пространство конфигурации родительской шины устройства.

Драйвер или другой системный компонент отправляет этот IRP на DISPATCH_LEVEL IRQL < в произвольном контексте потока.

Входные параметры

Parameters.ReadWriteConfig — это структура, содержащая следующие сведения:

ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length

Члены структуры могут интерпретироваться различными водителями автобусов по-разному, но они обычно определяются следующим образом:

WhichSpace
Задает пространство конфигурации. Сведения о значениях, которые можно указать для WhichSpace, см. в разделе IRP_MN_READ_CONFIG.

Буфера
Указывает на буфер, содержащий записываемые данные. Формат буфера зависит от шины.

Смещение
Задает смещение в пространстве конфигурации.

Длина
Указывает число записываемых байтов.

Выходные параметры

Возвращается в блоке состояния ввода-вывода.

Блок состояния ввода-вывода

Драйвер автобуса устанавливает для Irp-IoStatus.Status> значение STATUS_SUCCESS или соответствующее состояние ошибки, например STATUS_INVALID_PARAMETER_n, STATUS_NO_SUCH_DEVICE или STATUS_DEVICE_NOT_READY.

При успешном выполнении драйвер автобуса задает для Irp-IoStatus.Information> число записанных байтов.

Если драйверу автобуса не удается выполнить этот запрос немедленно, он может пометить ожидание IRP, вернуть STATUS_PENDING и завершить IRP позже.

Операция

Водитель автобуса обрабатывает этот IRP для своих дочерних устройств (дочерних PDO).

Драйверы функций и фильтров не обрабатывают этот IRP; они передают его следующему более низкому драйверу без изменений в Irp-IoStatus.Status> и не задают подпрограмму IoCompletion.

Общие правила обработки Plug and Play дополнительных irP см. в Plug and Play.

Отправка этого IRP

Как правило, драйвер функции отправляет этот IRP в стек устройств, к которому он подключен, и IRP обрабатывается родительским драйвером шины.

Сведения об отправке IRP см. в разделе Обработка irPs . Следующие действия применяются специально к этому IRP:

  • Выделите буфер из выстраивного пула и инициализируйте его данными для записи.

  • Задайте значения в следующем расположении стека ввода-вывода IRP: задайте для параметра MajorFunctionзначение IRP_MJ_PNP, для параметра MinorFunctionзадайте значение IRP_MN_WRITE_CONFIG и задайте соответствующие значения в Parameters.ReadWriteConfig.

  • Инициализируйте IoStatus.Status для STATUS_NOT_SUPPORTED.

  • Отмените выделение IRP и буфера, когда они больше не нужны.

Драйверы должны отправлять этот IRP из DISPATCH_LEVEL IRQL < .

Водитель может получить доступ к пространству конфигурации шины в DISPATCH_LEVEL через подпрограмму интерфейса шины, если драйвер родительского автобуса экспортирует такой интерфейс. Чтобы получить интерфейс автобуса, водитель отправляет запрос IRP_MN_QUERY_INTERFACE своему родительскому водителю автобуса. Затем драйвер вызывает соответствующую подпрограмму, возвращаемую в интерфейсе .

Например, чтобы записать пространство конфигурации из DISPATCH_LEVEL драйвер может вызвать IRP_MN_QUERY_INTERFACE во время инициализации драйвера, чтобы получить интерфейс BUS_INTERFACE_STANDARD от родительского драйвера шины. Драйвер отправляет IRP запроса из PASSIVE_LEVEL IRQL. Позже из кода в DISPATCH_LEVEL IRQL драйвер вызывает соответствующую подпрограмму, возвращаемую в интерфейсе, например Interface.SetBusData .

Требования

Заголовок

Wdm.h (включая Wdm.h, Ntddk.h или Ntifs.h)

См. также раздел

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG