Oplocks

Les articles sur les oplocks trouvés dans cette section concernent principalement les redirecteurs réseau, bien que certaines informations soient fournies pour les applications clientes. Vous trouverez plus d’informations sur le verrouillage d’opération pour les applications clientes dans les articles Verrous opportunistes du SDK Windows.

Vue d’ensemble d’Oplock

Un oplock (verrou opportuniste) est un verrou placé par un client sur un fichier qui réside sur un serveur. Dans la plupart des cas, un client demande un oplock pour pouvoir mettre en cache les données localement. Les oplocks sont utilisés par les redirecteurs réseau sur les clients disposant de serveurs distants et par les applications clientes sur les serveurs locaux. Consultez Types d’oplocks pour obtenir une description des différents verrous oplocks actuels et hérités.

Les oplocks permettent aux clients de serveurs de fichiers (tels que les clients utilisant les protocoles SMB et SMB2) de modifier dynamiquement la stratégie de mise en mémoire tampon d’un fichier ou d’un flux donné de manière cohérente. L’utilisation d’oplocks augmente les performances et réduit l’utilisation du réseau. Pour augmenter les performances réseau pour les opérations de fichiers distants, un client peut mettre en mémoire tampon les données de fichier localement, ce qui réduit ou élimine la nécessité d’envoyer et de recevoir des paquets réseau. Par exemple :

  • Un client peut ne pas avoir à écrire des informations dans un fichier sur un serveur distant s’il sait qu’aucun autre processus n’accède aux données.
  • Un client peut mettre en mémoire tampon les données en lecture anticipée à partir du fichier distant s’il sait qu’aucun autre processus n’écrit de données dans le fichier distant.

Les applications et les pilotes peuvent également utiliser des verrous d’opération pour accéder en toute transparence aux fichiers sans affecter les autres applications qui peuvent avoir besoin d’utiliser ces fichiers.

Les systèmes de fichiers comme NTFS prennent en charge plusieurs flux de données par fichier. Le système accorde des oplocks sur les handles de flux, ce qui signifie que l’oplock est accordé pour une ouverture donnée d’un flux de fichiers et que les opérations s’appliquent à ce flux. À quelques exceptions près, les opérations sur un flux n’affectent pas les oplocks sur un autre flux. Pour plus d’informations, consultez Demande et octroi d’oplocks.

Pour les systèmes de fichiers qui ne prennent pas en charge d’autres flux de données, tels que FAT, pensez à « fichier » lorsque les discussions oplock font référence à « flux ».

La fonctionnalité de verrouillage d’opération principale du package oplock est implémentée dans le noyau, principalement par le biais de routines FsRtlXxx telles que FsRtlInitializeOplock. Les systèmes de fichiers appellent ce package pour implémenter la fonctionnalité oplock dans leur système de fichiers. Les articles oplock de cette section décrivent comment le système de fichiers NTFS interagit avec le package oplock du noyau. D’autres systèmes de fichiers fonctionnent de la même manière, même s’il peut y avoir des différences mineures.

Touches oplock

À compter de Windows 7, le handle de flux peut être associé à une clé oplock, qui est une valeur GUID utilisée pour identifier plusieurs handles qui appartiennent à la même vue de cache client. Il est plus précis de dire que la clé oplock est associée à la structure FILE_OBJECT à laquelle le handle de flux fait référence. Cette distinction est importante lorsque le handle est dupliqué, par exemple avec DuplicateHandle. Chacun des handles en double fait référence à la même structure FILE_OBJECT sous-jacente.

La clé oplock peut être fournie explicitement (à IoCreateFileEx) lors de la création du handle de flux. Le système traite le handle comme ayant une clé oplock unique associée si une clé oplock n’est pas spécifiée explicitement lors de la création du handle, où sa clé diffère de toute autre clé sur n’importe quel autre handle.

Un oplock est rompu lorsque :

  • Une opération de fichier est reçue sur un handle autre que celui sur lequel le verrouillage d’opération a été accordé, ET
  • La clé oplock associée au handle de l’oplock diffère de la clé associée au handle de l’opération, AND
  • L’opération n’est pas compatible avec le verrou d’opération actuellement accordé.

L’oplock s’interrompt même s’il s’agit du même processus ou thread effectuant l’opération incompatible. Par exemple, un oplock exclusif est cassé immédiatement lorsque :

  1. Un processus ouvre un flux pour lequel un oplock exclusif est accordé.
  2. Ce même processus ouvre ensuite à nouveau le même flux à l’aide d’une clé oplock différente (ou pas).

Pour plus d’informations, consultez Blocages d’opération cassants.

N’oubliez pas que les clés oplock existent sur les handles et qu’elles sont « mises sur » le handle lors de la création du handle. Vous pouvez associer un handle à une clé oplock même si aucun oplock n’est accordé.