IOCTL_VOLUME_READ_PLEX control code
Performs a read on a specific plex of a volume. Because all plexes are identical, the volume manager can retrieve data from any of a volume's plexes during a normal read operation. The volume manager spreads reads among a volume's plexes, to balance the I/O load on the physical media and to maximize read performance.
If, however, an application or kernel-mode component must read data from a particular plex instead of letting the volume manager pick one, it can use this IOCTL to do so.
Parameters.DeviceIoControl.InputBufferLength in the I/O stack location of the IRP indicates the size, in bytes, of the input buffer, which must be greater than or equal to the value of sizeof(VOLUME_READ_PLEX_INPUT).
Caller inserts the VOLUME_READ_PLEX_INPUT structure, containing the logical offset, at the beginning of the buffer at Irp->AssociatedIrp.SystemBuffer.
Like IRP_MJ_READ, this IOCTL stores the read data in the memory buffer passed as a memory descriptor list (MDL) in the Irp->MdlAddress field.
If the operation is successful, the volume manager sets the Status field to STATUS_SUCCESS.
The VOLUME_READ_PLEX_INPUT structure at Irp->AssociatedIrp.SystemBuffer has a Length member that must be aligned on a 512-byte boundary. If Length does not have the proper alignment, the operation fails and the volume manager sets the Status field to VKE_EINVAL.
|Available starting with Windows XP.|