IRP_MJ_CREATE_MAILSLOT (pilotes FS et filtre)

Date d’envoi

Le gestionnaire d’E/S envoie la demande de IRP_MJ_CREATE_MAILSLOT lors de la création ou de l’ouverture d’un nouveau maillot. Normalement, cette IRP est envoyée :

Si la demande de création de maillot est effectuée correctement, l’application ou le composant en mode noyau reçoit un handle pour le fichier maillot instance.

La gestion des IRP_MJ_CREATE_MAILSLOT est pratiquement la même que IRP_MJ_CREATE.

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, la routine de répartition du pilote de système de fichiers doit effectuer les opérations suivantes :

  • Définissez Irp-IoStatus.Status> et Irp-IoStatus.Information> sur les valeurs appropriées.
  • Terminez l’IRP et retournez une valeur NTSTATUS appropriée.

Sinon, le pilote du système de fichiers doit traiter la demande de création.

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

Si l’objet d’appareil cible est l’objet de contrôle du pilote de filtre hérité, la routine de répartition de ce pilote doit terminer l’IRP et retourner une valeur NTSTATUS appropriée, après avoir défini Irp-IoStatus.Status> et Irp-IoStatus.Information> sur les valeurs appropriées.

Sinon, le pilote de filtre hérité doit effectuer tout traitement nécessaire. Selon la nature du filtre, il doit terminer l’IRP ou le transmettre au pilote inférieur suivant sur la pile.

En règle générale, les pilotes de filtre hérités ne doivent pas retourner STATUS_PENDING en réponse à IRP_MJ_CREATE_MAILSLOT. Toutefois, si un pilote de niveau inférieur retourne STATUS_PENDING, le pilote de filtre hérité doit transmettre cette valeur status jusqu’à la chaîne de pilotes.

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. Dans les paramètres suivants, Irp pointe vers l’IRP et IrpSp pointe vers le IO_STACK_LOCATION. 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 création de maillot.

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

  • Irp->Indicateurs est défini sur les indicateurs suivants pour cette demande :

    • IRP_CREATE_OPERATION
    • IRP_DEFER_IO_COMPLETION
    • IRP_SYNCHRONOUS_API
  • 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. Le système de fichiers définit le membre Information de cette structure sur l’une des valeurs suivantes :

    • FILE_CREATED
    • FILE_OPENED
  • Irp->RequestorMode indique le mode d’exécution du processus qui a demandé l’opération, KernelMode ou UserMode. Si l’indicateur SL_FORCE_ACCESS_CHECK est défini, des vérifications d’accès doivent être effectuées, même si Irp-RequestorMode> est KernelMode.

  • IrpSp->MajorFunction est défini sur IRP_MJ_CREATE_MAILSLOT.

  • IrpSp->Les indicateurs peuvent être définis sur SL_FORCE_ACCESS_CHECK. Si cet indicateur est défini, des vérifications d’accès doivent être effectuées même si la valeur de Irp-RequestorMode> est KernelMode.

  • *IrpSp->Parameters.CreateMailslot.SecurityContext-AccessState> est un pointeur vers une structure de ACCESS_STATE contenant le contexte d’objet de l’objet, les types d’accès accordés et les types d’accès souhaités restants.

  • IrpSp->Parameters.CreateMailslot.SecurityContext-DesiredAccess> est une structure ACCESS_MASK spécifiant les droits d’accès demandés pour le maillot. Pour plus d’informations, consultez la description du paramètre DesiredAccess dans IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.Options est un masque de bits d’indicateurs qui spécifient les options à appliquer lors de la création ou de l’ouverture du maillot, ainsi que l’action à entreprendre si le maillot existe déjà.

    Les 8 bits élevés de ce paramètre correspondent au paramètre Disposition de IoCreateFileSpecifyDeviceObjectHint.

    Les 24 bits inférieurs de ce membre correspondent au paramètre CreateOptions à IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.ShareAccess est un masque de bits des droits d’accès au partage demandés pour le maillot. Si ce membre est égal à zéro, l’accès exclusif est demandé. Pour plus d’informations, consultez la description du paramètre ShareAccess dans IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.Parameters est un pointeur vers une structure de MAILSLOT_CREATE_PARAMETERS qui contient les paramètres de création pour lorsque le maillot est en cours de création.

  • IrpSp->FileObject est un pointeur vers un objet de fichier que le Gestionnaire d’E/S crée pour représenter le maillot à créer ou à ouvrir. Lorsque le système de fichiers traite la demande de IRP_MJ_CREATE_MAILSLOT, il définit les champs FsContext et éventuellement FsContext2 de cet objet de fichier sur des valeurs spécifiques au système de fichiers. Ainsi, les valeurs des champs FsContext et FsContext2 ne peuvent pas être considérées comme valides tant que le système de fichiers n’a pas traité la demande de création. Pour plus d’informations, consultez Flux de fichiers, contextes de flux et contextes de Per-Stream.

    IoCancelFileOpen (et FltCancelFileOpen) définissent l’indicateur FO_FILE_OPEN_CANCELLED dans le champ Indicateurs de l’objet fichier. La définition de cet indicateur indique que la demande IRP_MJ_CREATE_MAILSLOT a été annulée et qu’une demande de IRP_MJ_CLOSE sera émise pour cet objet de fichier. Une fois la demande de création annulée, elle ne peut pas être rééditée.

    Le paramètre IrpSp-FileObject> contient un pointeur vers le champ RelatedFileObject, qui est également une structure FILE_OBJECT. Le champ RelatedFileObject d’une structure de FILE_OBJECT est utilisé pour indiquer qu’un maillot donné a été ouvert par rapport à un objet fichier déjà ouvert. Cela indique généralement que le fichier relatif est un répertoire, mais que des fichiers basés sur des flux peuvent être ouverts par rapport à un flux déjà existant d’un fichier. Le champ RelatedFileObject de la structure FILE_OBJECT est valide uniquement pendant le traitement de IRP_MJ_CREATE_MAILSLOT.

Voir aussi

ACCESS_MASK

ACCESS_STATE

FLT_PARAMETERS

FLT_PARAMETERS pour IRP_MJ_CREATE_MAILSLOT

FltCancelFileOpen

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoCancelFileOpen

IoCreateFile

IoCreateFileSpecifyDeviceObjectHint

IoCreateStreamFileObject

IoCreateStreamFileObjectLite

IoGetCurrentIrpStackLocation

IRP

IRP_MJ_CLEANUP

IRP_MJ_CLOSE

IRP_MJ_CREATE (référence du noyau WDK)

MAILSLOT_CREATE_PARAMETERS