IRP_MJ_LOCK_CONTROL (pilotes FS et filtre)

Date d’envoi

Le Gestionnaire d’E/S, d’autres composants du système d’exploitation et d’autres pilotes en mode noyau envoient des requêtes IRP_MJ_LOCK_CONTROL.

Opération : Pilotes du système de fichiers

Le pilote de système de fichiers doit extraire et décoder l’objet file pour déterminer si l’objet d’appareil cible est l’objet de périphérique de contrôle du système de fichiers. Si c’est le cas, le pilote de système de fichiers doit effectuer l’IRP comme il convient sans traiter la demande de verrouillage.

Sinon, si la demande a été émise sur un handle qui représente un fichier utilisateur ouvert, le pilote de système de fichiers doit effectuer l’opération indiquée par le code de fonction secondaire et terminer l’IRP. Si ce n’est pas le cas, le pilote doit échouer l’IRP.

Voici les codes de fonction secondaire valides :

Code Description
IRP_MN_LOCK Indique une demande de verrouillage de plage d’octets, éventuellement pour le compte d’une application en mode utilisateur qui a appelé la fonction Win32 LockFile .
IRP_MN_UNLOCK_ALL Indique une demande de libération de tous les verrous de plage d’octets pour un fichier, généralement parce que le dernier handle en attente d’un objet de fichier est en cours de fermeture.
IRP_MN_UNLOCK_ALL_BY_KEY Indique une demande de libération de tous les verrous de plage d’octets avec une valeur de clé spécifiée.
IRP_MN_UNLOCK_SINGLE Indique une demande de libération d’un verrou de plage d’octets unique, éventuellement pour le compte d’une application en mode utilisateur qui a appelé la fonction Win32 UnlockFile .

Opération : Pilotes de filtre de système de fichiers hérités

Les pilotes de filtre de système de fichiers doivent passer l’IRP au pilote inférieur suivant sur la pile après avoir effectué tout traitement nécessaire.

Paramètres

Un système de fichiers ou un pilote de filtre appelle IoGetCurrentIrpStackLocation avec l’IRP donné pour obtenir un pointeur vers son propre emplacement de pile dans l’IRP, indiqué dans la liste suivante en tant que IrpSp. (L’IRP s’affiche sous la forme Irp.) Le pilote peut utiliser les informations définies dans les membres suivants de l’IRP et de l’emplacement de pile IRP pour traiter une demande de contrôle de verrouillage :

  • DeviceObject est un pointeur vers l’objet d’appareil cible.

  • Irp->IoStatus pointe vers une structure IO_STATUS_BLOCK qui reçoit la status d’achèvement finale et des informations sur l’opération demandée.

  • IrpSp->FileObject pointe vers l’objet file associé à DeviceObject.

    Le paramètre IrpSp-FileObject> contient un pointeur vers le champ RelatedFileObject, qui est également une structure FILE_OBJECT. Le champ RelatedFileObject de la structure FILE_OBJECT n’est pas valide pendant le traitement de IRP_MJ_LOCK_CONTROL et ne doit pas être utilisé.

  • IrpSp->Les indicateurs peuvent être une ou plusieurs des valeurs suivantes :

Indicateur Signification
SL_EXCLUSIVE_LOCK Si cet indicateur est défini, un verrou exclusif de plage d’octets est demandé. Sinon, un verrou partagé est demandé.
SL_FAIL_IMMEDIATELY Si cet indicateur est défini, la demande de verrouillage doit échouer si elle ne peut pas être accordée immédiatement.
  • IrpSp->MajorFunction est défini sur IRP_MJ_LOCK_CONTROL.

  • IrpSp->MinorFunction est défini sur l’une des valeurs suivantes :

    • IRP_MN_LOCK
    • IRP_MN_UNLOCK_ALL
    • IRP_MN_UNLOCK_ALL_BY_KEY
    • IRP_MN_UNLOCK_SINGLE
  • IrpSp->Parameters.LockControl.ByteOffset est le décalage d’octets de départ dans le fichier de la plage d’octets à verrouiller ou à déverrouiller.

  • IrpSp->Parameters.LockControl.Key est la clé du verrou de plage d’octets.

  • IrpSp->Parameters.LockControl.Length est la longueur, en octets, de la plage d’octets à verrouiller ou à déverrouiller.

Voir aussi

FltProcessFileLock

FsRtlProcessFileLock

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoGetCurrentIrpStackLocation

IRP