IoAllocateIrp

PIRP
    IoAllocateIrp(

        IN CCHAR  StackSize,
        IN BOOLEAN  ChargeQuota
        );

IoAllocateIrp allocates an IRP, given the number of I/O stack locations for each driver layered under the caller, and, optionally, for the caller.

Parameters

StackSize
Specifies the number of I/O stack locations to be allocated for the IRP. This value must be at least equal to the StackSize of the next-lower driver’s device object, but can be one greater than this value. The calling driver need not allocate a stack location in the IRP for itself.
ChargeQuota
Should be set to FALSE by intermediate drivers. This can be set to TRUE only by highest-level drivers that are called in the context of the thread that originates the I/O request for which the driver is allocating another IRP.

Return Value

IoAllocateIrp returns a pointer to an IRP, which was allocated from nonpaged system space, or NULL if an IRP could not be allocated.

Comments

An intermediate or highest-level driver can call IoAllocateIrp to create IRPs for requests it sends to lower-level drivers. Such a driver must initialize the IRP and must set its IoCompletion routine in the IRP it creates so the caller can dispose of the IRP when lower-level drivers have completed processing of the request.

An intermediate or highest-level driver also can call IoBuildDeviceIoControlRequest, IoBuildAsynchronousFsdRequest or IoBuildSynchronousFsdRequest to set up requests it sends to lower-level drivers. Only a highest-level driver can call IoMakeAssociatedIrp.

Callers of IoAllocateIrp must be running at IRQL <= DISPATCH_LEVEL.

See Also

IO_STACK_LOCATION, IoBuildAsynchronousFsdRequest, IoBuildDeviceIoControlRequest, IoBuildSynchronousFsdRequest, IoFreeIrp, IoInitializeIrp, IoMakeAssociatedIrp, IoSetCompletionRoutine, IRP