Vérification de l’état Oplock d’une opération de IRP_MJ_CREATE
Ce qui suit s’applique uniquement lorsqu’un flux existant d’un fichier est ouvert (autrement dit, les flux nouvellement créés ne peuvent pas avoir de verrous oplocks préexistants sur eux).
Note Lors du traitement de IRP_MJ_CREATE pour un oplock, si l’accès souhaité ne contient rien d’autre que FILE_READ_ATTRIBUTES, FILE_WRITE_ATTRIBUTES ou SYNCHRONIZE, le verrouillage oplock ne s’arrête pas, sauf si FILE_RESERVE_OPFILTER est spécifié. La spécification de FILE_RESERVE_OPFILTER entraîne toujours un blocage d’opération si la création réussit. Par souci de concision et de simplicité, le tableau suivant omet ce qui précède, car il s’applique à tous les oplocks.
Type de requête | Conditions |
---|---|
Niveau 1 |
Cassé sur IRP_MJ_CREATE quand :
|
Si l’oplock est rompu :
|
|
Niveau 2 |
Cassé sur IRP_MJ_CREATE quand :
|
Si l’oplock est rompu :
|
|
Batch |
Cassé sur IRP_MJ_CREATE quand :
|
Si l’oplock est rompu :
|
|
Filtrer |
Cassé sur IRP_MJ_CREATE quand :
|
Si l’oplock est rompu :
|
|
Lire |
Cassé sur IRP_MJ_CREATE quand :
|
Si l’oplock est rompu :
|
|
Read-Handle |
Cassé sur IRP_MJ_CREATE quand :
|
Si l’oplock est rompu :
|
|
Lecture-écriture |
Cassé sur IRP_MJ_CREATE quand :
|
Si l’oplock est rompu :
|
|
Handle en lecture-écriture |
Cassé sur IRP_MJ_CREATE quand :
|
Si l’oplock est rompu :
|
Le système de fichiers effectue des vérifications supplémentaires pour les oplocks Batch et Filter (plutôt que le package oplock lui-même) lors du traitement d’une opération de IRP_MJ_CREATE, ce qui a un impact sur le fait que le système de fichiers demande au package oplock d’effectuer un traitement d’arrêt de verrouillage d’opération. Il s’agit d’un cas où les opérations sur un flux de données peuvent avoir un impact sur les oplocks sur d’autres flux de données du même fichier (autrement dit, les deux derniers éléments de liste de la liste de critères suivantes). Si un ou plusieurs des critères suivants sont remplis, le système de fichiers envoie une demande au package oplock pour effectuer un traitement d’arrêt de blocage d’opération :
Demandez une pause s’il s’agit d’une requête réseau ouverte et qu’une transaction KTM est présente. Sinon, ne demandez pas d’arrêt sur la requête réseau ouverte.
Si une opération REMPLACE, OVERWRITE ou OVERWRITE_IF est effectuée sur un autre flux de données et que FILE_SHARE_DELETE n’est pas spécifié et qu’il existe un oplock Batch ou Filter sur le flux de données principal, demandez l’arrêt de l’opération Batch ou Filter sur le flux de données principal.
Si une opération REMPLACE, OVERWRITE ou OVERWRITE_IF est effectuée sur le flux de données principal et que l’accès DELETE a été demandé et qu’il existe des oplocks Batch ou Filter sur tout autre flux de données, demandez l’arrêt des oplocks Batch ou Filter sur tous les autres flux de données qui en contiennent.
Lorsque le système de fichiers décide de demander au package oplock d’effectuer un traitement d’arrêt d’opération, les règles décrites dans le tableau précédent s’appliquent.
L’case activée pour arrêter les blocages de lots et de filtres se produit avant que les vérifications d’accès au partage soient effectuées. Cela signifie que l’oplock batch ou Filter est interrompu même si la demande ouverte échoue finalement en raison d’une violation de partage.