структура 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]
Растровое изображение выделения плит.
Комментарии
Сведения о состоянии подготовки возвращаются, если для элемента ActionDEVICE_DSM_INPUT задано значение DeviceDsmAction_Allocation. Вызывающий объект должен включать только один диапазон набора данных в системный буфер в DataSetRangesOffset.
При возврате системный буфер содержит DEVICE_DSM_OUTPUT структуру, за которой следует структура DEVICE_DATA_SET_LB_PROVISIONING_STATE. Структура DEVICE_DATA_SET_LB_PROVISIONING_STATE начинается со смещения от начала системного буфера, заданного параметром OutputBlockOffset в DEVICE_DSM_OUTPUT.
Каждый бит в растровом рисунке выделения представляет собой сопоставление плит в запрашиваемом диапазоне набора данных. Биты напрямую соответствуют слябам в диапазоне набора данных. Это означает, что бит 0 на растровом рисунке помечает первую плиту в диапазоне. Сляба сопоставляется, если битовое значение = 1, и несопоставленная, если битовое значение = 0.
Пространство для SlabAllocationBitMap должно быть выделено в зависимости от количества возможных плит в запрошенном диапазоне набора данных. Значение SlabAllocationBitMapLength возвращаемого растрового изображения равно (число плит / 32) + ((количество плит MOD 32) > 0 ? 1 : 0).
Размер Slab определяется элементом OptimalUnmapGranularityDEVICE_LB_PROVISIONING_DESCRIPTOR , возвращенным из запроса IOCTL_STORAGE_QUERY_PROPERTY . Длина предоставленного диапазона набора данных должна быть кратна значению OptimalUnmapGranularity. Если длина диапазона не кратна OptimalUnmapGranularity, она уменьшается до кратности.
Если начальное смещение в диапазоне набора данных не выравнивается на границе плиты, кратной OptimalUnmapGranularity, смещение будет скорректировано до следующей границы. Разница между запрошенным и скорректированным смещением возвращается в SlabOffsetDeltaInBytes.
Если общий объем выделения плиток, возвращенный в SlabAllocationBitMapBitCount , не соответствует ожиданиям из-за выравнивания диапазона набора данных или корректировки длины, может быть отправлен дополнительный запрос с диапазоном набора данных, измененным в соответствии со значениями SlabAllocationBitMapBitCount и SlabOffsetDeltaInBytes. Новый диапазон правильно выберет плиты, оставшиеся вне растрового изображения, возвращенного предыдущим запросом.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно начиная с Windows 8. |
Верхняя часть | ntddstor.h (включая Ntddstor.h) |