IRP_MN_WRITE_CONFIG
Водители автобусов с пространством конфигурации должны обрабатывать этот запрос для своих дочерних устройств (дочерних PDO). Драйверы функций и фильтров не обрабатывают этот запрос.
Значение
0x10
Основной код
При отправке
Драйвер или другой системный компонент отправляет этот 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) |