IRP_MN_WRITE_CONFIG

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

0x10

主代码

IRP_MJ_PNP

发送时

驱动程序或其他系统组件发送此 IRP 以将数据写入设备父总线的配置空间。

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

输入参数

Parameters.ReadWriteConfig 是包含以下信息的结构:

ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG Length

结构的成员可以由不同的总线驱动程序以不同的方式解释,但这些成员通常定义如下:

WhichSpace
指定配置空间。 有关可为 WhichSpace 指定的值的信息,请参阅 IRP_MN_READ_CONFIG

缓冲区
指向包含要写入的数据的缓冲区。 缓冲区的格式特定于总线。

抵消
指定到配置空间的偏移量。

长度
指定要写入的字节数。

输出参数

在 I/O 状态块中返回。

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.Status>,并且不设置 IoCompletion 例程。

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

发送此 IRP

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

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

  • 从分页池分配缓冲区,并使用要写入的数据对其进行初始化。

  • 设置 IRP 的下一个 I/O 堆栈位置中的值:将 MajorFunction 设置为 IRP_MJ_PNP,将 MinorFunction 设置为 IRP_MN_WRITE_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.SetBusData 例程。

要求

标头

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

另请参阅

IRP_MN_QUERY_INTERFACE

IRP_MN_READ_CONFIG