DEVICE_DATA_SET_LB_PROVISIONING_STATE 構造体 (winioctl.h)

IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES コントロール コードのDeviceDsmAction_Allocation アクションの出力構造。

構文

typedef struct _DEVICE_DATA_SET_LB_PROVISIONING_STATE {
  DWORD     Size;
  DWORD     Version;
  DWORDLONG SlabSizeInBytes;
  DWORD     SlabOffsetDeltaInBytes;
  DWORD     SlabAllocationBitMapBitCount;
  DWORD     SlabAllocationBitMapLength;
  DWORD     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

指定した範囲が、DEVICE_LB_PROVISIONING_DESCRIPTOR構造体で返される OptimalUnmapGranularity に揃っていない場合、SlabAllocationBitMap で表されるデータは、指定された範囲からこの量だけオフセットされます。

SlabAllocationBitMapBitCount

ビットマップ内の関連するビットの数。

SlabAllocationBitMapLength

ビットマップ配列内の DWORDの数。

SlabAllocationBitMap[ANYSIZE_ARRAY]

各スラブに対して 1 ビットを含む割り当てビットマップ。 ビットが設定されている場合は、対応するスラブが割り当てられます。 それ以外の場合、ビットが明確な場合、対応するスラブは未割り当てになります。

解説

プロビジョニング状態情報は、DEVICE_MANAGE_DATA_SET_ATTRIBUTES構造体の Action メンバーが DeviceDsmAction_Allocation に設定されている場合に返されます。 呼び出し元は、 DataSetRangesOffset のシステム バッファーに 1 つのデータ セット範囲のみを含める必要があります。

返された場合、システム バッファーには 、DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT 構造体の後に DEVICE_DATA_SET_LB_PROVISIONING_STATE 構造体が含まれます。 DEVICE_DATA_SET_LB_PROVISIONING_STATE構造体は、DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUTOutputBlockOffset で指定されたシステム バッファーの先頭からのオフセットから始まります。

割り当てビットマップ内の各ビットは、要求されたデータ セット範囲内のスラブ マッピングを表します。 ビットは、データ セット範囲内のスラブに直接対応します。 つまり、ビットマップ内のビット 0 は、範囲内の最初のスラブをマークします。 ビット値が 1 の場合はスラブがマップされ、ビット値が 0 の場合はマップ解除されます。

SlabAllocationBitMap の領域は、要求されたデータ セット範囲内で使用可能なスラブの数に基づいて割り当てる必要があります。 返されるビットマップの SlabAllocationBitMapLength は です (number_of_slabs / 32) + ((number_of_slabs MOD 32) > 0 ? 1 : 0)

スラブ のサイズは、IOCTL_STORAGE_QUERY_PROPERTYコントロール コードから返されるDEVICE_LB_PROVISIONING_DESCRIPTOR構造体の OptimalUnmapGranularity メンバーによって決まります。 指定するデータ セット範囲の長さは、 OptimalUnmapGranularity の倍数である必要があります。 範囲の長さが OptimalUnmapGranularity の倍数でない場合は、倍数に減らされます。

データ セット範囲の開始オフセットがスラブ境界 ( OptimalUnmapGranularity の倍数) に揃っていない場合、オフセットは次の境界に調整されます。 要求されたオフセットと調整されたオフセットの差は 、SlabOffsetDeltaInBytes で返されます。

データ セット範囲のアラインメントまたは長さの調整のために 、SlabAllocationBitMapBitCount で返されるスラブ割り当ての合計が期待どおりでない場合は、 SlabAllocationBitMapBitCountSlabOffsetDeltaInBytes の両方の値に従って変更されたデータ セット範囲で追加の要求を送信できます。 新しい範囲では、前の要求によって返されたビットマップから除外されたスラブが適切に選択されます。

要求されたスラブサイズが大きすぎる場合 (たとえば、HBA の最大転送長を超える場合)、 IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTESERROR_INVALID_PARAMETERで失敗する可能性があります。

要件

   
サポートされている最小のクライアント Windows 8
サポートされている最小のサーバー Windows Server 2012
Header winioctl.h (Windows.h を含む)

関連項目

DEVICE_LB_PROVISIONING_DESCRIPTOR

デバイス管理構造体

IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES