Chapter 7  StartIo and Queue Management Routines

This chapter contains the following information:

7.1  Queueing IRPs

7.2  StartIo Routine Requirements

7.2.1  StartIo Routines in NT Device Drivers

7.2.2  StartIo Routine Functionality

    7.2.2.1  Device Driver’s StartIo Routine Using Buffered I/O

    7.2.2.2  Device Driver’s StartIo Routine Using Direct I/O

    7.2.2.3  Handling Device Control Requests in StartIo

7.2.3  Programming the Device for I/O Operations

7.2.4  StartIo Routines in Higher-Level NT Drivers

7.2.5  Points to Consider in Implementing StartIo

7.3  Requirements for Using Interlocked Queues or Device Queues

7.3.1  Storage Requirements for Driver-Managed Queues

7.3.2  Setting Up Driver-Managed Queues

7.3.3  Queueing IRPs in Driver-Managed Queues

7.3.4  Managing Interlocked Queues with a Driver-Created Thread

7.3.5  Managing Supplemental Device Queues

The StartIo routine is defined by the I/O Manager as follows:

VOID

(*PDRIVER_STARTIO) (

    IN PDEVICE_OBJECT DeviceObject,

    IN PIRP Irp

     );

 

This chapter summarizes the required functionality of NT drivers’ standard StartIo routines. For NT driver designers who need to set up internal queues for IRPs in their drivers, it also summarizes the support Windows NT® provides for doing this and discusses some issues in managing driver-created internal queues.