FSCTL_OPLOCK_BREAK_ACK_NO_2 IOCTL (winioctl.h)

Répond à la notification indiquant qu’un verrou opportuniste sur un fichier est sur le point d’être relâché. Utilisez cette opération pour déverrouiller tous les verrous opportunistes sur le fichier, mais en le gardant ouvert.

Pour effectuer cette opération, appelez la fonction DeviceIoControl à l’aide des paramètres suivants.

BOOL DeviceIoControl(
  (HANDLE) hDevice,                 // handle to file
  FSCTL_OPLOCK_BREAK_ACK_NO_2,      // dwIoControlCode
  NULL,                             // lpInBuffer
  0,                                // nInBufferSize
  NULL,                             // lpOutBuffer
  0,                                // nOutBufferSize
  (LPDWORD) lpBytesReturned,        // number of bytes returned
  (LPOVERLAPPED) lpOverlapped       // OVERLAPPED structure
);

Remarques

Cette opération est utilisée uniquement par les applications clientes qui ont demandé un verrou opportuniste à un serveur local. Les applications clientes qui demandent des verrous opportunistes à partir de serveurs distants ne doivent pas les demander directement. Le redirecteur réseau demande en toute transparence des verrous opportunistes pour l’application.

Pour connaître les implications des E/S qui se chevauchent sur cette opération, consultez la section Remarques de la rubrique DeviceIoControl .

Lorsque vous recevez une notification indiquant qu’un verrou opportuniste sur un fichier est sur le point d’être rompu, utilisez le code de contrôle FSCTL_OPLOCK_BREAK_ACK_NO_2 pour indiquer au serveur que vous souhaitez abandonner les verrous opportunistes, mais que vous prévoyez de conserver le fichier ouvert. Si l’opération retourne le code d’erreur ERROR_IO_PENDING, le serveur a accordé un verrou de niveau 2 sur le fichier.

Une alternative à l’utilisation de FSCTL_OPLOCK_BREAK_ACK_NO_2 consiste à indiquer que l’application est sur le point de fermer le fichier de toute façon. Utilisez le code de contrôle FSCTL_OPBATCH_ACK_CLOSE_PENDING pour cette réponse.

Une autre alternative, utilisée si le verrou en cours de rupture est un verrou opportuniste exclusif, consiste à indiquer que le fichier doit recevoir un verrou opportuniste de niveau 2 à la place. Utilisez le code de contrôle FSCTL_OPLOCK_BREAK_ACKNOWLEDGE pour cette réponse.

Les applications sont informées qu’un verrou opportuniste est rompu à l’aide du membre hEvent de la structure OVERLAPPED associée au fichier sur lequel le verrou opportuniste est rompu. Les applications peuvent également utiliser des fonctions telles que GetOverlappedResult et HasOverlappedIoCompleted.

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) Oui
Système de fichiers résilient (ReFS) Oui

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