Partager via


IRP_MJ_CLEANUP (filtres FS et FS)

Date d’envoi

La réception de la demande IRP_MJ_CLEANUP indique que le nombre de références de handle sur un objet fichier a atteint zéro. (En d’autres termes, tous les handles de l’objet fichier ont été fermés.) Il est souvent envoyé lorsqu’une application en mode utilisateur a appelé la fonction Win32 CloseHandle (ou lorsqu’un pilote en mode noyau a appelé ZwClose) sur le dernier handle en attente d’un objet fichier.

Il est important de noter que l’objet file peut toujours être utilisé lorsque tous les handles d’un objet fichier ont été fermés. Les composants système, tels que le Gestionnaire de cache et le Gestionnaire de mémoire, peuvent contenir des références en suspens à l’objet fichier. Ces composants peuvent toujours lire ou écrire à partir d’un fichier, même après réception d’une demande de IRP_MJ_CLEANUP.

Opération : Pilotes du système de fichiers

Si l’objet d’appareil cible est l’objet de périphérique de contrôle du système de fichiers, le pilote du système de fichiers doit effectuer l’IRP.

Sinon, le pilote du système de fichiers doit traiter la demande de nettoyage.

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

Si l’objet de périphérique cible est l’objet de périphérique de contrôle du pilote de filtre, le pilote de filtre doit terminer l’IRP.

Sinon, le pilote de filtre doit passer l’IRP au pilote inférieur suivant sur la pile après avoir effectué tout traitement nécessaire.

Les enregistreurs de pilotes de filtre de système de fichiers doivent noter qu’IoCreateStreamFileObject provoque l’envoi d’une requête IRP_MJ_CLEANUP à la pile des pilotes du système de fichiers pour le volume. Étant donné que les systèmes de fichiers créent souvent des objets de fichier de flux en tant qu’effet secondaire d’opérations autres que IRP_MJ_CREATE, il est difficile pour les pilotes de filtre de détecter de manière fiable la création d’objets de fichier de flux. Par conséquent, un pilote de filtre doit s’attendre à recevoir des requêtes IRP_MJ_CLEANUP et IRP_MJ_CLOSE pour des objets de fichier précédemment invisibles.

Les enregistreurs de pilotes de filtre doivent également noter que, contrairement à IoCreateStreamFileObject, IoCreateStreamFileObjectLite n’entraîne pas l’envoi d’une demande de IRP_MJ_CLEANUP à la pile des pilotes du système de fichiers. Pour cette raison, et étant donné que les systèmes de fichiers créent souvent des objets de fichier de flux en tant qu’effet secondaire d’opérations autres que IRP_MJ_CREATE, il est difficile pour les pilotes de filtre de détecter de manière fiable la création d’objets de fichier de flux. Par conséquent, les pilotes de filtre doivent s’attendre à recevoir des demandes IRP_MJ_CLOSE pour des objets fichier précédemment invisibles.

Paramètres

Un système de fichiers ou un pilote de filtre hérité appelle IoGetCurrentIrpStackLocation avec l’IRP donné pour obtenir un pointeur vers son propre emplacement de pile dans l’IRP, indiqué dans la liste suivante sous la forme 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 la pile IRP pour traiter une demande de nettoyage.

  • DeviceObject

    Pointeur vers l’objet d’appareil cible.

  • Irp-Flags>

    Les indicateurs suivants sont définis pour cette demande :

    • IRP_CLOSE_OPERATION
    • IRP_SYNCHRONOUS_API
  • Irp-IoStatus>

    Pointeur vers une structure de IO_STATUS_BLOCK qui reçoit le status d’achèvement final et des informations sur l’opération demandée.

  • Irp-FileObject>

    Pointeur vers l’objet fichier associé à DeviceObject.

    Le paramètre Irp-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_CLEANUP et ne doit pas être utilisé.

  • Irp-MajorFunction>

    Spécifie IRP_MJ_CLEANUP.

Voir aussi

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_CLEANUP (référence du noyau WDK)

IRP_MJ_CLOSE

IRP_MJ_CREATE

ZwClose