DEVICE_MANAGE_DATA_SET_ATTRIBUTES 结构 (ntddstor.h)
DEVICE_DSM_INPUT (或DEVICE_MANAGE_DATA_SET_ATTRIBUTES) 结构为设备的数据集属性指定管理操作。
语法
typedef struct _DEVICE_MANAGE_DATA_SET_ATTRIBUTES {
ULONG Size;
DEVICE_DSM_ACTION Action;
ULONG Flags;
ULONG ParameterBlockOffset;
ULONG ParameterBlockLength;
ULONG DataSetRangesOffset;
ULONG DataSetRangesLength;
} DEVICE_MANAGE_DATA_SET_ATTRIBUTES, *PDEVICE_MANAGE_DATA_SET_ATTRIBUTES, DEVICE_DSM_INPUT, *PDEVICE_DSM_INPUT;
成员
Size
DEVICE_DSM_INPUT结构的大小(以字节为单位)。 此成员的值将随着成员添加到 结构而更改。
Action
一个DEVICE_DSM_ACTION值,该值指定要执行的操作。 有关操作值和说明的列表,请参阅 DEVICE_DSM_ACTION 说明。
如果在操作中设置了DeviceDsmActionFlag_NonDestructive标志 ( 最重要的位) ,则指定的操作是非破坏性的。 对于非破坏性操作,即使驱动程序不处理指定的操作,驱动程序也可以安全地将 IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 请求转发到堆栈中的下一个较低驱动程序。 如果驱动程序确实处理 DSM,则应在将IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES请求转发到下一个较低的驱动程序之前,对 DataSetRangesOffset 和 DataSetRangesLength 成员指定的数据集范围块执行正常处理。
Flags
这些标志对所有控件操作都是全局性的。 此成员可以设置为以下标志之一:
标志值 | 含义 |
---|---|
DEVICE_DSM_FLAG_ENTIRE_DATA_SET_RANGE | 控制操作是为整个数据集范围块指定的。 如果设置了此标志,必须将 DataSetRangesOffset 和 DataSetRangesLength 成员设置为零。 |
ParameterBlockOffset
指定参数块在 IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 请求的有效负载中的开头。 参数块的格式取决于 Action 成员的值。 有关参数块格式的详细信息,请参阅 DEVICE_DSM_ACTION 说明。 注意:参数块的偏移量必须在相应参数的地址边界上对齐。
如果 ParameterBlockOffset 设置为零,则参数块不存在。
ParameterBlockLength
指定IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES请求的有效负载内参数块的长度(以字节为单位)。
如果 ParameterBlockLength 设置为零,则参数块不存在。
DataSetRangesOffset
指定IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES请求的有效负载内数据集范围的块的开头。 此块由一个或多个格式化为 DEVICE_DSM_RANGE 结构的连续条目组成。 注意:数据集范围块的偏移量必须在DEVICE_DSM_RANGE结构的地址边界上对齐。
如果设置为零,则数据集范围块不存在。
DataSetRangesLength
指定IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES请求的有效负载中数据集范围的块的长度(以字节为单位)。 如果 DataSetRangesLength 设置为零,则数据集范围块不存在。
注解
有关 IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 请求的有效负载格式的详细信息,请参阅 数据集管理概述。 缓冲区的总大小至少应为 sizeof(DEVICE_DSM_INPUT) + ParameterBlockLength + DataSetRangesLength
。
数据集范围块由 DataSetRangesOffset 和 DataSetRangesLength 成员指定。 如果此块存在,则包含连续 DEVICE_DSM_RANGE 结构。
要求
要求 | 值 |
---|---|
Header | ntddstor.h (包括 Ntddstor.h) |