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