The IRP with all of its parameters can be put on a queue if the I/O request cannot be performed immediately. I/O completion is reported back to the I/O manager by passing its address to a routine for that purpose, IoCompleteRequest.
In cases where an input/output operation cannot be performed immediately, the IRP with all its parameters is added to a waiting list. The I/O manager is then informed of the completion through a specific procedure, IoCompleteRequest, which passes the address of the completed operation.