Allocating Additional IRPs
There are some situations where an intermediate driver needs to allocate additional IRPs to send to another driver. For example, the initialization code in one driver might want to query the capabilities of a lower-level driver by issuing an IOCTL request. An example filter driver that implements this strategy is listed later in this chapter.
As another example, a fault-tolerant disk driver, implemented as an intermediate driver, might allocate an additional IRP to send to a second (mirror) driver. This second IRP would mirror the original request.
Yet a third example occurs when a higher-level driver exposes an abstract command to a client. The command itself is implemented through a series of lower-level calls, each ...