Condividi tramite


DEVICE_DATA_SET_LB_PROVISIONING_STATE struttura (winioctl.h)

Struttura di output per l'azione DeviceDsmAction_Allocation del codice di controllo IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES .

Sintassi

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;

Members

Size

Dimensioni di questa struttura, inclusa la bitmap, in byte.

Version

Versione di questa struttura.

SlabSizeInBytes

Dimensioni di una lastra, in byte.

SlabOffsetDeltaInBytes

Se l'intervallo specificato non è allineato alla struttura OptimalUnmapGranularity come restituito nella struttura DEVICE_LB_PROVISIONING_DESCRIPTOR , i dati rappresentati in SlabAllocationBitMap vengono offset dall'intervallo specificato in base a questa quantità.

SlabAllocationBitMapBitCount

Numero di bit rilevanti nella bitmap.

SlabAllocationBitMapLength

Numero di SWORDnella matrice bitmap.

SlabAllocationBitMap[ANYSIZE_ARRAY]

Bitmap di allocazione contenente un bit per ogni slab. Se viene impostato un bit, viene allocato il slab corrispondente. In caso contrario, se un bit è chiaro, lo slab corrispondente non viene allocato.

Commenti

Le informazioni sullo stato di provisioning vengono restituite quando il membro Action della struttura DEVICE_MANAGE_DATA_SET_ATTRIBUTES è impostato su DeviceDsmAction_Allocation. Il chiamante deve includere un solo intervallo di set di dati nel buffer di sistema in DataSetRangesOffset.

In caso di restituzione, il buffer di sistema contiene una struttura DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT seguita dalla struttura DEVICE_DATA_SET_LB_PROVISIONING_STATE . La struttura DEVICE_DATA_SET_LB_PROVISIONING_STATE inizia a un offset dall'inizio del buffer di sistema specificato da OutputBlockOffset in DEVICE_MANAGE_DATA_SET_ATTRIBUTES_OUTPUT.

Ogni bit nella bitmap di allocazione rappresenta un mapping di slab all'interno dell'intervallo di set di dati richiesto. I bit corrispondono direttamente ai lalabi nell'intervallo del set di dati. Ciò significa che il bit 0 nella bitmap contrassegna il primo slab nell'intervallo. Un slab viene mappato se il valore bit = 1 e non è stato eseguito il mapping se il valore di bit = 0.

Lo spazio per SlabAllocationBitMap deve essere allocato in base al numero di possibililabi nell'intervallo di set di dati richiesto. SlabAllocationBitMapLength della bitmap restituita è (number_of_slabs / 32) + ((number_of_slabs MOD 32) > 0 ? 1 : 0).

Le dimensioni dellab vengono determinate dal membro OptimalUnmapGranularity della struttura DEVICE_LB_PROVISIONING_DESCRIPTOR restituita da un codice di controllo IOCTL_STORAGE_QUERY_PROPERTY . La lunghezza dell'intervallo del set di dati fornito deve essere un multiplo di OptimalUnmapGranularity. Quando la lunghezza dell'intervallo non è un multiplo di OptimalUnmapGranularity, viene ridotta a essere un multiplo.

Se l'offset iniziale nell'intervallo del set di dati non è allineato a un limite di slab, un multiplo di OptimalUnmapGranularity, l'offset verrà modificato al limite successivo. La differenza tra l'offset richiesto e l'offset corretto viene restituito in SlabOffsetDeltaInBytes.

Se il totale dell'allocazione del lab restituito in SlabAllocationBitMapBitCount non è previsto a causa dell'allineamento o della lunghezza del set di dati, è possibile inviare una richiesta aggiuntiva con un intervallo di set di dati modificato in base ai valori in SlabAllocationBitMapBitCount e SlabOffsetDeltaInBytes. Il nuovo intervallo seleziona correttamente i slabi lasciati fuori dalla bitmap restituita dalla richiesta precedente.

Se la dimensione della lastra richiesta è troppo grande ,ad esempio se è maggiore della lunghezza massima di trasferimento dell'HBA, il IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES può non riuscire con ERROR_INVALID_PARAMETER.

Requisiti

   
Client minimo supportato Windows 8
Server minimo supportato Windows Server 2012
Intestazione winioctl.h (include Windows.h)

Vedi anche

DEVICE_LB_PROVISIONING_DESCRIPTOR

strutture Gestione dispositivi

IOCTL_STORAGE_MANAGE_DATA_SET_ATTRIBUTES