IRP_MN_READ_CONFIG
具有配置空间的总线的总线驱动程序必须处理其子设备 (子 PDO) 的此请求。 筛选器和函数驱动程序不处理此请求。
值
0x0F
主代码
发送时
驱动程序或其他系统组件发送此 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 的下一个 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) |