The Microsoft Windows family of operating systems communicates with drivers by sending I/O request packets (IRPs). The data structure that encapsulates the IRP not only describes an I/O request but also maintains information about the status of the request as it passes through the drivers that handle it. Because the data structure serves two purposes, an IRP can be defined as a container for an I/O request or a thread-independent call stack. This document considers IRPs from these perspectives and can help driver writers understand what their drivers must do to respond correctly to I/O requests.
Included in this white paper:
| • | Definition of IRP |
| • | Passing an IRP to the Next Lower Driver |
| • | Completing an IRP |
| • | Synchronous I/O Responses |
| • | Asynchronous I/O Responses |
| • | Life Cycle of a File Object |
| • | Data Transfer Mechanisms |
| • | I/O Control Codes |
| • | Success, Error, and Warning Status for IRP Completion |
| • | Building IRPs |
| • | Debugging I/O Problems |
| • | Call to Action and Resources |