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


IRP_MN_READ_CONFIG

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

Значение

0x0F

Основной код

IRP_MJ_PNP

При отправке

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

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

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

Элемент Parameters.ReadWriteConfig структуры IO_STACK_LOCATION сам по себе является структурой, содержащей следующие сведения:

ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length

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

WhichSpace
Указывает область памяти для доступа. Этот параметр может принимать значения:

Значение Шина Значение

PCI_WHICHSPACE_CONFIG

PCI

Пространство конфигурации PCI.

PCI_WHICHSPACE_ROM

PCI

Память, доступная только для чтения.

PCCARD_COMMON_MEMORY

PCCARD_COMMON_MEMORY_INDIRECT

PCMCIA

Основная память PCCARD.

PCCARD_ATTRIBUTE_MEMORY

PCCARD_ATTRIBUTE_MEMORY_INDIRECT

PCMCIA

Пространство атрибута PCMCIA (конфигурация).

PCCARD_PCI_CONFIGURATION_SPACE

PCMCIA

Пространство конфигурации PCI.

Значения PCI_XXX определяются в Wdm.h. Значения PCCARD_XXX определены в ntddpcm.h.

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

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

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

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

При успешном выполнении драйвер шины заполняет буфер в Parameters.ReadWriteConfig.Buffer запрошенными данными.

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

Драйвер автобуса устанавливает для 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>. Состояние и они не задают подпрограмму IoCompletion.

Драйвер автобуса, обрабатывающий этот запрос, должен проверка параметр WhichSpace, чтобы убедиться, что он содержит значение, которое поддерживает драйвер.

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

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

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

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

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

  • Задайте значения в следующем расположении стека ввода-вывода IRP: задайте для параметра MajorFunctionзначение IRP_MJ_PNP, задайте для параметра MinorFunctionзначение IRP_MN_READ_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.GetBusData .

Требования

Заголовок

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

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

IRP_MN_QUERY_INTERFACE

IRP_MN_WRITE_CONFIG