1.2.1 Processing IRPs

IoGetCurrentIrpStackLocation 
Returns a pointer to the caller’s I/O stack location in a given IRP.
IoGetNextIrpStackLocation 
Returns a pointer to the next-lower-level driver’s I/O stack location in a given IRP.
IoGetRelatedDeviceObject 
Returns a pointer to the device object represented by a given file object.
IoGetFunctionCodeFromCtlCode 
Returns the value of the function field within a given IOCTL_XXX or FSCTL_XXX.
IoSetCompletionRoutine 
Registers a driver-supplied IoCompletion routine with a given IRP, so the IoCompletion routine is called when the next-lower-level driver has completed the requested operation in one or more of the following ways: successfully, with an error, and/or by cancelling the IRP.
IoCallDriver 
Sends an IRP to a lower-level driver.
IoMarkIrpPending 
Marks a given IRP indicating that STATUS_PENDING was returned because further processing is required by another driver routine or by a lower-level driver.
IoStartPacket 
Calls the driver’s StartIo routine with the given IRP for the given device object or inserts the IRP into the device queue if the device is already busy, specifying whether the IRP is cancelable.
IoAcquireCancelSpinLock 
Synchronizes cancelable-state transitions for IRPs in a multiprocessor-safe manner.
IoSetCancelRoutine 
Sets or clears the Cancel routine in an IRP. Setting a Cancel routine makes an IRP cancelable.
IoReleaseCancelSpinLock 
Releases the cancel spin lock when the driver has changed the cancelable state of an IRP or releases the cancel spin lock from the driver’s Cancel routine.
IoCancelIrp 
Marks an IRP as cancelled.
IoReadPartitionTable 
Returns a list of partitions on a disk with a given sector size.
IoSetPartitionInformation 
Sets the partition type and number for a (disk) partition.
IoWritePartitionTable 
Writes partition tables for a disk, given the device object representing the disk, the sector size, and a pointer to a buffer containing the drive geometry.
IoAllocateErrorLogEntry 
Allocates and initializes an error log packet; returns a pointer so the caller can supply error-log data and call IoWriteErrorLogEntry with the packet.
IoWriteErrorLogEntry 
Queues a previously allocated error log packet, filled in by the driver, to the system error logging thread.
IoIsErrorUserInduced 
Returns a Boolean indicating whether an I/O request failed due to one of the following conditions: STATUS_IO_TIMEOUT, STATUS_DEVICE_NOT_READY, STATUS_UNRECOGNIZED_MEDIA, STATUS_VERIFY_REQUIRED, STATUS_WRONG_VOLUME, STATUS_MEDIA_WRITE_PROTECTED, or STATUS_NO_MEDIA_IN_DEVICE. If the result is TRUE, a removable-media driver must call IoSetHardErrorOrVerifyDevice before completing the IRP.
IoSetHardErrorOrVerifyDevice 
Supplies the device object for which the given IRP was failed due to a user-induced error, such as supplying the incorrect media for the requested operation or changing the media before the requested operation was completed. A file system driver uses the associated device object to send a popup to the user, who can then correct the error and/or retry the operation.
IoGetDeviceToVerify 
Returns a pointer to the device object, representing a removable-media device, that is the target of the given thread’s I/O request. (This routine is useful only to file systems or other highest-level drivers.)
IoRaiseHardError 
Causes a popup to be sent to the user indicating that the given IRP was failed on the given device object for an optional VPB, so that the user can correct the error and/or can retry the operation.
IoRaiseInformationalHardError
Causes a popup to be sent to the user, showing an I/O error status and optional string supplying more information.
ExRaiseStatus 
Raises an error status so that a caller-supplied structured exception handler is called. (This routine is useful only to highest-level drivers that supply exception handlers, in particular to file systems.)
IoStartNextPacket 
Dequeues the next IRP for a given device object, specifying whether the IRP is cancelable, and calls the driver’s StartIo routine.
IoStartNextPacketByKey 
Dequeues the next IRP, according to the specified sort-key value, for a given device object, specifies whether the IRP is cancelable, and calls the driver’s StartIo routine.
IoCompleteRequest 
Completes an I/O request, giving a priority boost to the original caller and returning a given IRP to the I/O system for disposal: either to call any IoCompletion routines supplied by higher-level drivers, or to return status to the original requestor of the operation.
IoGetCurrentProcess 
Returns a pointer to the current process. (This routine is useful only to highest-level drivers.)
IoGetInitialStack 
Returns the initial base address of the current thread’s stack. (This routine is useful only to highest-level drivers.)