DEVICE_DATA_SET_LB_PROVISIONING_STATE 结构 (ntddstor.h)
请求数据集范围的逻辑块预配信息时, IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 请求返回DEVICE_DATA_SET_LB_PROVISIONING_STATE结构。
语法
typedef struct _DEVICE_DATA_SET_LB_PROVISIONING_STATE {
ULONG Size;
ULONG Version;
ULONGLONG SlabSizeInBytes;
ULONG SlabOffsetDeltaInBytes;
ULONG SlabAllocationBitMapBitCount;
ULONG SlabAllocationBitMapLength;
ULONG SlabAllocationBitMap[ANYSIZE_ARRAY];
} DEVICE_DATA_SET_LB_PROVISIONING_STATE, *PDEVICE_DATA_SET_LB_PROVISIONING_STATE, DEVICE_DSM_ALLOCATION_OUTPUT, *PDEVICE_DSM_ALLOCATION_OUTPUT;
成员
Size
此结构的大小,包括板分配位图,以字节为单位。
Version
此结构的版本。
SlabSizeInBytes
板的大小(以字节为单位)。
SlabOffsetDeltaInBytes
从数据集范围中指定的偏移量到起始板位置的差值(以字节为单位)。
SlabAllocationBitMapBitCount
数据集范围的分配位图映射板中的位数。
SlabAllocationBitMapLength
包含板分配位图的 ULONG 数组值的数目。
SlabAllocationBitMap[ANYSIZE_ARRAY]
板分配的位图。
注解
当 DEVICE_DSM_INPUT 的 Action 成员设置为 DeviceDsmAction_Allocation 时,将返回预配状态信息。 调用方应在 DataSetRangesOffset 的系统缓冲区中仅包含一个数据集范围。
返回时,系统缓冲区包含 DEVICE_DSM_OUTPUT 结构,后跟DEVICE_DATA_SET_LB_PROVISIONING_STATE结构。 DEVICE_DATA_SET_LB_PROVISIONING_STATE 结构从 DEVICE_DSM_OUTPUT 中 OutputBlockOffset 指定的系统缓冲区开头的偏移量处开始。
分配位图中的每个位都表示所请求的数据集范围内的一个板映射。 位直接对应于数据集范围内的板。 这意味着位图中的位 0 标记范围中的第一个板。 如果位值 = 1,则映射板;如果位值 = 0,则取消映射。
应根据请求的数据集范围内可能的板数来分配 SlabAllocationBitMap 的空间。 返回的位图的 SlabAllocationBitMapLength 是 (个板数 / 32 个) + ( (个板数 MOD 32) > 0? 1: 0) 。
板大小由从IOCTL_STORAGE_QUERY_PROPERTY请求返回的DEVICE_LB_PROVISIONING_DESCRIPTOR的 OptimalUnmapGranularity 成员决定。 提供的数据集范围的长度应为 OptimalUnmapGranularity 的倍数。 如果范围长度不是 OptimalUnmapGranularity 的倍数,则将其减小为倍数。
如果数据集范围内的起始偏移量在板边界( OptimalUnmapGranularity 的倍数)上不对齐,则偏移量将调整为下一个边界。 请求的偏移量和调整后的偏移量之间的差值以 SlabOffsetDeltaInBytes 为单位返回。
如果 SlabAllocationBitMapBitCount 中返回的板分配总计由于数据集范围对齐或长度调整而不符合预期,则可能会提交附加请求,其中包含根据 SlabAllocationBitMapBitCount 和 SlabOffsetDeltaInBytes 中的值修改的数据集范围。 新范围将正确选择上一个请求返回的位图中留下的板。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | 从Windows 8开始可用。 |
标头 | ntddstor.h (包括 Ntddstor.h) |