IOCTL_VOLUME_READ_PLEX IOCTL (ntddvol.h)
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.
Major code
Input buffer
Caller inserts the VOLUME_READ_PLEX_INPUT structure, containing the logical offset, at the beginning of the buffer at Irp->AssociatedIrp.SystemBuffer.
Input buffer length
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).Output buffer
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.
Output buffer length
The length of the buffer.
Status block
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.
Requirements
Requirement | Value |
---|---|
Minimum supported client | Available starting with Windows XP. |
Header | ntddvol.h (include Ntddvol.h) |