Writing a StartIo Routine

As its name suggests, a StartIo routine is responsible for starting an I/O operation on the physical device.

Most lowest-level drivers provide a StartIo routine and rely on the I/O manager to queue IRPs to a system-supplied device queue. Some lowest-level drivers are designed to set up and manage their own supplemental IRP queues, but even these usually also provide a StartIo routine. (For more information about supplemental queues, see Setting up and Using Device Queues and Managing Device Queues.)

Higher-level drivers, including FSDs and PnP function and filter drivers, seldom have a StartIo routine because it can hamper performance. Instead, most file system drivers set up and maintain internal queues of IRPs. Other higher-level drivers either have internal queues for IRPs or simply pass IRPs on to lower drivers from their dispatch routines. See Driver-Managed IRP Queues for more information.

You can use the IoSetStartIoAttributes routine to set attributes that modify StartIo handling for your driver.

This section contains the following topics:

StartIo Routines in Lowest-Level Drivers

StartIo Routines in Higher-Level Drivers

Points to Consider for StartIo Routines