FSCTL_SHRINK_VOLUME IOCTL (winioctl.h)

Signale si le volume doit être préparé pour effectuer l’opération de réduction, si l’opération de réduction doit être validée ou si l’opération de réduction doit être interrompue.

Pour effectuer cette opération, appelez la fonction DeviceIoControl avec les paramètres suivants.

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
);

Remarques

Ce code de contrôle est uniquement pris en charge sur les systèmes de fichiers NTFS et RAW.

Pour effectuer une opération de réduction, vous devez :

  1. Appelez CreateFile pour ouvrir un handle sur le volume.
  2. Appelez FSCTL_SHRINK_VOLUME. Définissez le membre ShrinkRequestType de la structure SHRINK_VOLUME_INFORMATION sur ShrinkPrepare. Définissez le membre NewNumberOfSectors de la même structure sur zéro. Si cet appel réussit, le système de fichiers n’allouera pas de clusters au-delà de la fin de la nouvelle longueur de volume.
  3. Appelez FSCTL_MOVE_FILE sur tous les fichiers au-delà du nouveau nombre de secteurs et déplacez-les dans la plage valide. Vous êtes responsable du déplacement des fichiers affectés par l’opération de réduction.
  4. Appelez FSCTL_SHRINK_VOLUME. Définissez le membre ShrinkRequestType de la structure SHRINK_VOLUME_INFORMATION sur ShrinkCommit. Définissez le membre NewNumberOfSectors de la même structure sur zéro. Si tous les fichiers au-delà de la fin de la nouvelle taille de volume n’ont pas été déplacés, l’appel échoue avec STATUS_ALREADY_COMMITTED (ERROR_ACCESS_DENIED). Sinon, le système de fichiers a été réduit.
  5. Appelez IOCTL_DISK_GROW_PARTITION. Définissez le membre BytesToGrow de la structure DISK_GROW_PARTITION sur le nombre négatif qui représente le nombre d’octets à supprimer.

Dans Windows 8 et Windows Server 2012, ce code est pris en charge par les technologies suivantes.

Technologie Prise en charge
Protocole Server Message Block (SMB) 3.0 No
Basculement transparent SMB 3.0 (TFO) No
SMB 3.0 avec partages de fichiers avec montée en puissance parallèle (SO) No
Système de fichiers du volume partagé de cluster (CsvFS) Voir le commentaire

Est pris en charge uniquement sur le nœud sur lequel NTFS est monté.

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows Vista [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2008 [applications de bureau uniquement]
En-tête winioctl.h (inclure Windows.h)

Voir aussi