IRP_MN_START_DEVICE

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

Value

0x00

主代码

IRP_MJ_PNP

发送时间

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

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

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

输入参数

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

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

输出参数

I/O 状态块

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

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

操作

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

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

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

在 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