处理存储类驱动程序中的 PnP 启动
当 PnP 管理器使用启动请求调用类驱动程序的 DispatchPnP 例程时,存储类驱动程序执行特定于设备的初始化, (IRP_MJ_PNP IRP_MN_START_DEVICE) 。 存储类驱动程序的 DispatchPnP 例程调用内部 StartDevice 例程或内联实现相同的功能。 由于发送到 FDO 的启动请求必须先由堆栈中最低的驱动程序处理,因此存储类驱动程序的 DispatchPnP 例程在调用 StartDevice 之前,会使用 IoCallDriver 将请求转发到下一个较低的驱动程序。 如果请求已发送到 PDO,驱动程序无需在处理请求之前转发请求。
存储类驱动程序的内部 StartDevice 例程使用驱动程序确定的数据设置其 FDO 的设备扩展,以管理设备的 I/O 请求。 有关详细信息,请参阅 设置存储类驱动程序的设备扩展。
StartDevice 例程应启用驱动程序在其 AddDevice 例程中注册的任何设备接口。 (请参阅 设备接口类。) 它还可能为其设备对象创建符号链接。
下部设备的启动完成后,驱动程序可以假定设备处于 D0 电源状态, (完全打开,并且大多数情况下) 运行。 如果设备未完全通电,端口驱动程序会将请求排入队列,直到设备准备就绪。 但是,如果驱动程序的 StartDevice 例程需要执行需要当前浪涌的任何操作(例如,启动磁盘驱动器),则驱动程序必须在执行该操作之前向下一个较低级别的驱动程序发送 D0 电源请求。
FILE_DEVICE_DISK 或 FILE_DEVICE_MASS_STORAGE 类型的设备的驱动程序可以注册空闲检测,并通过在其 PoRegisterDeviceforIdleDetection 调用中指定保护和性能超时值 -1 来为设备类使用标准电源策略超时。
有关存储类驱动程序的 DispatchPnP 例程的详细信息,请参阅 处理对存储外围设备的 PnP 请求。 有关处理 PnP 启动请求的详细信息,请参阅 启动设备。