任何更高级别的驱动程序都可以有 StartIo 例程。 但是,此类驱动程序不太可能与现有较低级别的驱动程序互作,并且可能表现出性能不佳的特征。
较高级别的驱动程序中的 StartIo 例程具有以下效果:
- 可以通过在驱动程序的 DispatchXxx 例程中调用 IoStartPacket 和在 IoCompletion 例程中调用 IoStartNextPacket 来排队传入的 IRP,这样可以通过 StartIo 例程依次处理每一个 IRP。 
- 驱动程序的 I/O 吞吐量可能会在大量 I/O 需求期间明显变慢,因为它的 StartIo 例程可能会成为瓶颈。 
- 驱动程序的 StartIo 例程在 IRQL = DISPATCH_LEVEL 的情况下,针对每个 IRP 调用 IoCallDriver,因此导致所有较低级别的驱动程序调度例程也在 IRQL = DISPATCH_LEVEL 运行。 这会限制低级驱动程序在其调度例程中可以调用的支持函数集。 由于大多数驱动程序编写器假设其驱动程序的调度例程在 IRQL < DISPATCH_LEVEL运行,因此高级驱动程序不太可能与许多现有较低级别的驱动程序互作。 
- StartIo 例程会降低整个系统吞吐量,因为它及其链中所有较低级别的驱动程序的调度例程都在 IRQL = DISPATCH_LEVEL运行。 - 有关运行标准驱动程序例程的 IRCL 的详细信息,请参阅 管理硬件优先级。 
系统提供的更高级别的驱动程序都没有 StartIo 例程,因为它可能会降低驱动程序本身的 IRP 处理速度,对于高于和低于驱动程序的所有驱动程序,以及整个系统。
大多数更高级别的驱动程序只需将 IRP 从调度例程发送到较低级别的驱动程序,并在 其 IoCompletion 例程中执行任何必要的清理处理。
但是,较高级别的驱动程序可以为请求特定操作的 IRP 设置内部队列,或者设置内部队列来存储绑定到一组不同类型的基础设备的 IRP,例如 SCSI 端口驱动程序。 有关详细信息,请参阅 IRP 入队和出队。