Partager via


FSCTL_LOCK_VOLUME IOCTL (winioctl.h)

Verrouille un volume s’il n’est pas utilisé. Un volume verrouillé est accessible uniquement via des handles de l’objet de fichier (*hDevice) qui verrouille le volume. Pour plus d'informations, consultez la section Notes.

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

BOOL DeviceIoControl(
  (HANDLE) hVolume,            // handle to a volume
  (DWORD) FSCTL_LOCK_VOLUME,   // dwIoControlCode
  NULL,                        // lpInBuffer
  0,                           // nInBufferSize
  NULL,                        // lpOutBuffer
  0,                           // nOutBufferSize
  (LPDWORD) lpBytesReturned,   // number of bytes returned
  NULL                         // OVERLAPPED structure
);

Irp-IoStatus.Status> a la valeur STATUS_SUCCESS si la demande réussit.

Sinon, indiquez la condition d’erreur appropriée en tant que code NTSTATUS.

Pour plus d’informations, consultez Valeurs NTSTATUS.

Remarques

Le handle hDevice passé à DeviceIoControl doit être un handle vers un volume, ouvert pour l’accès direct. Pour récupérer ce handle, appelez CreateFile avec le paramètre lpFileName défini sur une chaîne au format suivant :

\.\X:

X est une lettre de partition de disque dur, un lecteur de disquette ou un lecteur de CD-ROM. L’application doit également spécifier les indicateurs FILE_SHARE_READ et FILE_SHARE_WRITE dans le paramètre dwShareMode de CreateFile.

Si le volume spécifié est un volume système ou contient un fichier de page, l’opération échoue.

S’il existe des fichiers ouverts sur le volume, cette opération échoue. À l’inverse, la réussite de cette opération indique qu’il n’y a pas de fichiers ouverts.

Cette opération est utile pour les applications qui ont besoin d’un accès exclusif à un volume pendant une période de temps, par exemple, l’utilitaire de disque et les programmes de sauvegarde.

Un volume verrouillé reste verrouillé jusqu’à ce que l’une des opérations suivantes se produise :

Le système vide toutes les données mises en cache sur le volume avant de le verrouiller. Par exemple, toutes les données contenues dans un cache en écriture différée sont écrites dans le volume.

Le système de fichiers NTFS traite un volume verrouillé comme un volume démonté. Le code de contrôle FSCTL_DISMOUNT_VOLUME fonctionne de la même façon, mais ne case activée pas pour les fichiers ouverts avant le démontage. Notez qu’en l’absence d’une opération de verrouillage réussie, un volume démonté peut être remonté par n’importe quel processus à tout moment. Il ne s’agit pas d’un état idéal pour effectuer une sauvegarde de volume, par exemple.

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
 

Sur le volume de verrouillage CsvFs, la notification PNP est envoyée uniquement sur le nœud où la demande de verrouillage a été émise. Un verrou réussit uniquement si le filtre CsvFs au-dessus de NTFS ne voit aucun fichier ouvert.

Après l’acquisition d’un verrou sur un volume CSV, vous devez fermer la poignée utilisée pour verrouiller ce volume avant d’ouvrir un handle sur le volume. Le déverrouillage du volume à l’aide de FSCTL_UNLOCK_VOLUME n’est pas suffisant.

Configuration requise

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

Voir aussi

CloseHandle

CreateFile

DeviceIoControl

FSCTL_DISMOUNT_VOLUME

FSCTL_UNLOCK_VOLUME

Codes de contrôle de gestion des volumes