DEVICE_DATA_SET_LB_PROVISIONING_STATE结构(ntddstor.h)
请求数据集范围的逻辑块预配信息时,DEVICE_DATA_SET_LB_PROVISIONING_STATE结构由 IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES 请求返回。
语法
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_INPUTDeviceDsmAction_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) |