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:
où 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 :
- L’application utilise le code de contrôle FSCTL_UNLOCK_VOLUME pour déverrouiller le volume.
- Le handle se ferme, soit directement via CloseHandle, soit indirectement quand un processus se termine.
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) |