FSCTL_SHRINK_VOLUME IOCTL (winioctl.h)

Segnala che il volume deve essere preparato per eseguire l'operazione di compattazione, l'operazione di compattazione deve essere eseguita con commit o l'operazione di compattazione deve essere terminata.

Per eseguire questa operazione, chiamare la funzione DeviceIoControl con i parametri seguenti.

BOOL DeviceIoControl(
  (HANDLE) hDevice,             // handle to device
  FSCTL_SHRINK_VOLUME,          // dwIoControlCode
  (LPVOID) lpInBuffer,          // input buffer
  nInBufferSize,                // size of input buffer    
  NULL,                         // output buffer
  O,                            // size of output buffer
  (LPDWORD) lpBytesReturned,    // number of bytes returned
  (LPOVERLAPPED) lpOverlapped   // OVERLAPPED structure
);

Commenti

Questo codice di controllo è supportato solo nei file system NTFS e RAW.

Per completare un'operazione di compattazione, è necessario:

  1. Chiamare CreateFile per aprire un handle al volume.
  2. Chiamare FSCTL_SHRINK_VOLUME. Impostare il membro ShrinkRequestType della struttura SHRINK_VOLUME_INFORMATION su ShrinkPrepare. Impostare il membro NewNumberOfSectors della stessa struttura su zero. Se questa chiamata ha esito positivo, il file system non alloca i cluster oltre la fine della nuova lunghezza del volume.
  3. Chiamare FSCTL_MOVE_FILE in tutti i file oltre il nuovo numero di settori e spostarli all'interno dell'intervallo valido. È responsabile dello spostamento di tutti i file interessati dall'operazione di compattazione.
  4. Chiamare FSCTL_SHRINK_VOLUME. Impostare il membro ShrinkRequestType della struttura SHRINK_VOLUME_INFORMATION su ShrinkCommit. Impostare il membro NewNumberOfSectors della stessa struttura su zero. Se tutti i file oltre la fine della nuova dimensione del volume non sono stati spostati, la chiamata non riesce con STATUS_ALREADY_COMMITTED (ERROR_ACCESS_DENIED). In caso contrario, il file system è stato ridotto.
  5. Chiamare IOCTL_DISK_GROW_PARTITION. Impostare il membro BytesToGrow della struttura DISK_GROW_PARTITION sul numero negativo che rappresenta il numero di byte da rimuovere.

In Windows 8 e Windows Server 2012 questo codice è supportato dalle tecnologie seguenti.

Tecnologia Supportato
Protocollo SMB (Server Message Block) 3.0 No
Failover trasparente SMB 3.0 (TFO) No
SMB 3.0 con condivisioni file con scalabilità orizzontale (SO) No
File system del volume condiviso del cluster (CsvFS) Vedere il commento

È supportato solo nel nodo con NTFS montato.

Requisiti

Requisito Valore
Client minimo supportato Windows Vista [solo app desktop]
Server minimo supportato Windows Server 2008 [solo app desktop]
Intestazione winioctl.h (include Windows.h)

Vedi anche