IOCTL_SCSI_MINIPORT_DSM IOCTL (scsi.h)
数据集管理 (DSM) 通知在 IOCTL_SCSI_MINIPORT_DSM 控制代码请求中传输到微型端口驱动程序。 IOCTL_SCSI_MINIPORT_DSM请求是IOCTL_SCSI_MINIPORT的子 IOCTL。 此 IOCTL 由 StorPort 为响应 DSM 操作而生成,然后作为 STORAGE_REQUEST_BLOCK (SRB) 发送到微型端口,其函数类型为 SRB_FUNCTION_IO_CONTROL。 输入和输出数据包含在 SRB 数据块中。
主要代码
输入缓冲区
在 SRB 的 DataBuffer 成员中指定的缓冲区必须包含 SRB_IO_CONTROL 结构和 DSM_NOTIFICATION_REQUEST_BLOCK 结构。
输入缓冲区长度
DataTransferLength 指示缓冲区的大小(以字节为单位),该缓冲区 的大小必须至少 为 (SRB_IO_CONTROL) + size of (DSM_NOTIFICATION_REQUEST_BLOCK) ,并包含 MP_DEVICE_DATA_SET_RANGE 结构的额外存储。
输出缓冲区
更新 SRB_IO_CONTROL 结构将返回到 SRB 中的数据缓冲区。 SrbStatus 包含微型端口处理请求的结果。
输出缓冲区长度
SRB_IO_CONTROL结构的长度。
状态块
函数请求的结果状态在 SRB_IO_CONTROL 的 SrbStatus 成员中设置。 下面是 DSM 磁盘 IOCTL 状态代码。
SRB 状态 | 说明 |
---|---|
SRB_STATUS_SUCCESS | 请求已成功完成。 |
SRB_STATUS_INVALID_REQUEST | 请求包含无效的缓冲区大小 |
注解
DSM_NOTIFICATION_REQUEST_BLOCK
DSM_NOTIFICATION_REQUEST_BLOCK结构紧跟 SRB 数据缓冲区中的SRB_IO_CONTROL结构。 DSM_NOTIFICATION_REQUEST_BLOCK 在 ntddscsi.h 中定义如下。
typedef struct _DSM_NOTIFICATION_REQUEST_BLOCK {
ULONG Version;
ULONG Size;
ULONG NotifyFLags;
ULONG DataSetProfile;
ULONG Reserved[3];
ULONG DataSetRangesCount;
MP_DEVICE_DATA_SET_RANGE DataSetRanges[ANYSIZE_ARRAY];
} DSM_NOTIFICATION_REQUEST_BLOCK, *PDSM_NOTIFICATION_REQUEST_BLOCK;
MP_DEVICE_DATA_SET_RANGE
LBA 范围作为MP_DEVICE_DATA_SET_RANGE结构的数组包含在 DSM_NOTIFICATION_REQUEST_BLOCK 的 dataSetRanges 成员中。 MP_DEVICE_DATA_SET_RANGE 在 ntddscsi.h 中定义如下。
typedef struct _MP_DEVICE_DATA_SET_RANGE {
LONGLONG StartingOffset;
ULONGLONG LengthInBytes;
} MP_DEVICE_DATA_SET_RANGE, *PMP_DEVICE_DATA_SET_RANGE;
DSM_NOTIFICATION_REQUEST_BLOCK结构位于 SRB 的 DataBuffer中的SRB_IO_CONTROL结构之后。
此 IOCTL 的SRB_IO_CONTROL结构在其 Signature 成员中包含IOCTL_MINIPORT_SIGNATURE_DSM_NOTIFICATION,在 ControlCode 成员中包含IOCTL_SCSI_MINIPORT_DSM。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8.1开始可用。 |
标头 | scsi.h (包括 Ntddscsi.h、Storport.h) |