IOCTL_VOLUME_READ_PLEX IOCTL (ntddvol.h)

对卷的特定 执行读取。 由于所有 plexs 都是相同的,因此卷管理器可以在正常读取操作期间从卷的任何 plex 中检索数据。 卷管理器将读取分散到卷的丛中,以平衡物理媒体上的 I/O 负载并最大程度地提高读取性能。

但是,如果应用程序或内核模式组件必须从特定 plex 读取数据,而不是让卷管理器选取数据,则它可以使用此 IOCTL 执行此操作。

主要代码

IRP_MJ_DEVICE_CONTROL

输入缓冲区

调用方在 Irp-AssociatedIrp.SystemBuffer> 缓冲区的开头插入包含逻辑偏移量的VOLUME_READ_PLEX_INPUT结构。

输入缓冲区长度

IRP 的 I/O 堆栈位置中的 Parameters.DeviceIoControl.InputBufferLength 指示输入缓冲区的大小(以字节为单位),该大小必须大于或等于 size of (VOLUME_READ_PLEX_INPUT) 的值。

输出缓冲区

IRP_MJ_READ 一样,此 IOCTL 将读取数据存储在内存缓冲区中作为内存描述符列表传递, (Irp-MdlAddress> 字段中的 MDL) 。

输出缓冲区长度

缓冲区的长度。

状态块

如果操作成功,卷管理器会将 “状态” 字段设置为STATUS_SUCCESS。

Irp-AssociatedIrp.SystemBuffer> 处的 VOLUME_READ_PLEX_INPUT 结构有一个 Length 成员,该成员必须在 512 字节边界上对齐。 如果 Length 没有正确的对齐方式,则操作将失败,卷管理器会将 “状态” 字段设置为VKE_EINVAL。

要求

要求
最低受支持的客户端 从 Windows XP 开始可用。
标头 ntddvol.h (包括 Ntddvol.h)

另请参阅

VOLUME_READ_PLEX_INPUT