处理存储类驱动程序中的 PnP 启动

当 PnP 管理器使用启动请求调用类驱动程序的 DispatchPnP 例程时,存储类驱动程序执行特定于设备的初始化, IRP_MN_START_DEVICE) (IRP_MJ_PNP 。 存储类驱动程序的 DispatchPnP 例程调用内部 StartDevice 例程或实现相同的功能内联。 由于发送到 FDO 的启动请求必须首先由堆栈中的最低驱动程序进行处理,因此存储类驱动程序的 DispatchPnP 例程在调用 StartDevice之前将请求转发到下一个较低的驱动程序。 如果请求发送到 PDO,驱动程序在处理请求之前不需要转发请求。

存储类驱动程序的内部 StartDevice 例程使用驱动程序确定的数据设置其 FDO 的设备扩展,以管理设备的 I/O 请求。 有关详细信息,请参阅 设置存储类驱动程序的设备扩展

StartDevice 例程应启用驱动程序在其 AddDevice 例程中注册的任何设备接口。 (请参阅 设备接口类.) 它还可能为其设备对象创建符号链接。

在较低设备的启动完成后,驱动程序可以假定设备处于 D0 电源状态, (完全打开并运行) ,以用于大多数目的。 如果设备未完全启动,端口驱动程序将排队请求,直到设备准备就绪。 但是,如果驱动程序的 StartDevice 例程需要执行任何需要当前(例如启动磁盘驱动器)的操作,驱动程序必须在执行该操作之前将 D0 电源请求发送到下一个较低驱动程序。

FILE_DEVICE_DISK或FILE_DEVICE_MASS_STORAGE类型的设备的驱动程序可以通过在其 PoRegisterDeviceforIdleDetection 调用中指定 -1 的保护和性能超时值来注册空闲检测,并使用设备类的标准电源策略超时值。

有关存储类驱动程序 DispatchPnP 例程的详细信息,请参阅 处理对存储外围设备的 PnP 请求。 有关处理 PnP 启动请求的详细信息,请参阅 “启动设备”。