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)

另请参阅

DEVICE_DSM_ACTION 说明

DEVICE_DSM_INPUT

IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES

IOCTL_STORAGE_QUERY_PROPERTY