IRP_MN_START_DEVICE

所有 PnP 驱动程序都必须处理此 IRP。

0x00

主要代码

IRP_MJ_PNP

发送时间

PnP 管理器在将硬件资源(如果有)分配给设备后发送此 IRP。 设备可能是最近枚举的,并且是第一次启动,或者设备在停止资源重新平衡后可能正在重启。

有时,PnP 管理器会将 IRP_MN_START_DEVICE 发送到已启动的设备,提供与设备当前使用的资源集不同的资源。 驱动程序通过调用 IoInvalidateDeviceState 并响应设置了PNP_RESOURCE_REQUIREMENTS_CHANGED标志的后续 IRP_MN_QUERY_PNP_DEVICE_STATE 请求来启动此操作。 例如,总线驱动程序可能使用此机制在 PCI 到 PCI 桥上打开新的光圈。

PnP 管理器在 IRQL PASSIVE_LEVEL系统线程的上下文中发送此 IRP。

输入参数

IO_STACK_LOCATION 结构的 Parameters.StartDevice.AllocatedResources 成员指向描述 PnP 管理器分配给设备的硬件资源的CM_RESOURCE_LIST。 此列表包含原始形式的资源。 使用原始资源对设备进行编程。

Parameters.StartDevice.AllocatedResourcesTranslated 指向描述 PnP 管理器分配给设备的硬件资源的 CM_RESOURCE_LIST 。 此列表包含已翻译格式的资源。 使用已转换的资源连接中断向量、映射 I/O 空间和映射内存。

输出参数

I/O 状态块

驱动程序将 Irp-IoStatus.Status> 设置为STATUS_SUCCESS或适当的错误状态,例如STATUS_UNSUCCESSFUL或STATUS_INSUFFICIENT_RESOURCES。

如果驱动程序需要一些时间才能对设备运行其启动操作,则可以将 IRP 标记为挂起并返回STATUS_PENDING。

Operation

此 IRP 必须先由设备的父总线驱动程序处理,然后由设备堆栈中的每个更高级别的驱动程序处理。

为了响应此 IRP,驱动程序将首次启动设备或重启已停止的设备。 启动设备所需的确切操作因设备而异,但可能包括为设备供电、执行特定于设备的初始化以及连接中断。

无论驱动程序是首次启动设备还是在 IRP_MN_STOP_DEVICE后重启设备,驱动程序通常都可以以相同的方式处理此 IRP,除非驱动程序需要在停止后重启时还原设备状态。

在 Windows Vista 和更高版本的操作系统上,我们建议驱动程序始终将 IRP_MN_START_DEVICE IRP 并稍后完成其处理。 此顺序使系统能够以异步方式处理设备重启。 (在 Windows Vista 之前的操作系统上,驱动程序可以从其调度例程返回STATUS_PENDING,但 PnP 管理器不会将设备重启与任何其他操作重叠。)

有关处理启动 IRP 的详细信息,请参阅 启动设备

发送此 IRP

预留给系统使用。 驱动程序不得发送此 IRP。

要求

标头

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

另请参阅

IRP_MN_STOP_DEVICE