IRP_MN_READ_CONFIG

具有配置空间的总线的总线驱动程序必须处理其子设备 (子 PDO) 的此请求。 筛选器和函数驱动程序不处理此请求。

0x0F

主代码

IRP_MJ_PNP

发送时

驱动程序或其他系统组件发送此 IRP 以读取设备父总线的配置空间。

驱动程序或其他系统组件在任意线程上下文中的 IRQL < DISPATCH_LEVEL发送此 IRP。

输入参数

IO_STACK_LOCATION 结构的 Parameters.ReadWriteConfig 成员本身是包含以下信息的结构:

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 的缓冲区

I/O 状态块

总线驱动程序将 Irp-IoStatus.Status> 设置为STATUS_SUCCESS或适当的错误状态,例如STATUS_INVALID_PARAMETER_n、STATUS_NO_SUCH_DEVICE或STATUS_DEVICE_NOT_READY。

成功后,总线驱动程序会将 Irp-IoStatus.Information> 设置为返回的字节数。

如果总线驱动程序无法立即完成此请求,则可以将 IRP 标记为挂起,返回STATUS_PENDING,并在以后完成 IRP。

Operation

总线驱动程序处理其子设备 (子 PDO) 的此 IRP。

函数和筛选器驱动程序不处理此 IRP;它们将其传递给下一个下一个较低驱动程序,而 Irp-IoStatus> 没有更改。状态,它们不设置 IoCompletion 例程。

处理此请求的总线驱动程序应检查 WhichSpace 参数,以确保它包含驱动程序支持的值。

有关处理即插即用次要 IRP 的一般规则,请参阅即插即用。

发送此 IRP

通常,函数驱动程序将此 IRP 发送到它所附加到的设备堆栈中的顶部驱动程序,IRP 由父总线驱动程序处理。

有关发送 IRP 的信息,请参阅处理 IRP。 以下步骤专门适用于此 IRP:

  • 从分页池中分配缓冲区,并将其初始化为零。

  • 设置 IRP 的下一个 I/O 堆栈位置中的值:将 MajorFunction 设置为 IRP_MJ_PNP,将 MinorFunction 设置为 IRP_MN_READ_CONFIG,并在 Parameters.ReadWriteConfig 中设置适当的值。

  • 初始化 IoStatus.Status 以STATUS_NOT_SUPPORTED。

  • 不再需要 IRP 和缓冲区时解除分配它们。

驱动程序必须从 IRQL < DISPATCH_LEVEL发送此 IRP。

如果父总线驱动程序支持此类接口,则驱动程序可以通过总线接口例程在 DISPATCH_LEVEL 访问总线的配置空间。 若要获取总线接口,驱动程序会将 IRP_MN_QUERY_INTERFACE 请求发送到附加驱动程序的设备堆栈。 然后,驱动程序调用接口中返回的相应例程。

例如,若要从 DISPATCH_LEVEL 读取配置空间,驱动程序可以在驱动程序初始化期间调用 IRP_MN_QUERY_INTERFACE ,以从父总线驱动程序获取 BUS_INTERFACE_STANDARD 接口。 驱动程序从 IRQL PASSIVE_LEVEL发送查询 IRP。 稍后,驱动程序从 IRQL DISPATCH_LEVEL 的代码调用接口中返回的相应例程,例如 Interface.GetBusData 例程。

要求

标头

Wdm.h(包括 Wdm.h、Ntddk.h 或 Ntifs.h)

另请参阅

IRP_MN_QUERY_INTERFACE

IRP_MN_WRITE_CONFIG