IOCTL_SCSI_MINIPORT_DSM IOCTL (storport.h)
数据集管理(DSM)通知将传输到 IOCTL_SCSI_MINIPORT_DSM 控制代码请求中的微型端口驱动程序。 IOCTL_SCSI_MINIPORT_DSM 请求是 IOCTL_SCSI_MINIPORT的子 IOCTL。 StorPort 生成的此 IOCTL 以响应 DSM作,然后以 STORAGE_REQUEST_BLOCK(SRB)的形式发送到微型端口,其函数类型为 SRB_FUNCTION_IO_CONTROL。 输入和输出数据包含在 SRB 数据块中。
主要代码
输入缓冲区
SRB DataBuffer 成员中指定的缓冲区必须包含 SRB_IO_CONTROL 结构和 DSM_NOTIFICATION_REQUEST_BLOCK 结构。
输入缓冲区长度
DataTransferLength 指示缓冲区的大小(以字节为单位),该缓冲区的大小必须至少 大小 (SRB_IO_CONTROL) + sizeof(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 范围包含在 DataSetRanges 中,DSM_NOTIFICATION_REQUEST_BLOCK 成员作为 MP_DEVICE_DATA_SET_RANGE 结构的数组。 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 DataBufferSRB_IO_CONTROL 结构之后。
此 IOCTL 的 SRB_IO_CONTROL 结构在其 签名 成员中包含IOCTL_MINIPORT_SIGNATURE_DSM_NOTIFICATION,ControlCode 成员中包含 IOCTL_SCSI_MINIPORT_DSM。
要求
要求 | 价值 |
---|---|
最低支持的客户端 | Windows 8.1。 |
标头 | storport.h (包括 Ntddscsi.h、Storport.h) |