Freigeben über


IRP_MJ_CREATE_MAILSLOT (FS- und Filtertreiber)

Sendebedingungen

Der E/A-Manager sendet die IRP_MJ_CREATE_MAILSLOT-Anforderung, wenn ein neues Maillot erstellt oder geöffnet wird. Normalerweise wird diese IRP gesendet:

Wenn die Maillot-Erstellungsanforderung erfolgreich abgeschlossen wurde, empfängt die Anwendung oder Kernelmoduskomponente ein Handle für die maillot-Datei instance.

Der Umgang mit IRP_MJ_CREATE_MAILSLOT ist in etwa identisch mit IRP_MJ_CREATE.

Vorgang: Dateisystemtreiber

Wenn das Zielgerätobjekt das Steuerungsgeräteobjekt des Dateisystems ist, muss die Dispatchroutine des Dateisystemtreibers die folgenden Vorgänge ausführen:

  • Legen Sie Irp-IoStatus.Status> und Irp-IoStatus.Information> auf die entsprechenden Werte fest.
  • Schließen Sie die IRP ab, und geben Sie einen entsprechenden NTSTATUS-Wert zurück.

Andernfalls sollte der Dateisystemtreiber die Erstellungsanforderung verarbeiten.

Vorgang: Legacy-Dateisystemfiltertreiber

Wenn das Zielgerätobjekt das Steuerungsgeräteobjekt des Legacyfiltertreibers ist, muss die Dispatchroutine dieses Treibers die IRP abschließen und einen entsprechenden NTSTATUS-Wert zurückgeben, nachdem Irp-IoStatus.Status> und Irp-IoStatus.Information> auf die entsprechenden Werte festgelegt wurden.

Andernfalls sollte der Legacyfiltertreiber alle erforderlichen Verarbeitungsschritte ausführen. Je nach Art des Filters sollte er entweder den IRP abschließen oder an den nächstniedrigen Treiber auf dem Stapel übergeben.

Im Allgemeinen sollten Legacyfiltertreiber als Reaktion auf IRP_MJ_CREATE_MAILSLOT keine STATUS_PENDING zurückgeben. Wenn jedoch ein Treiber auf niedrigerer Ebene STATUS_PENDING zurückgibt, sollte der Legacyfiltertreiber diesen status Wert in der Treiberkette übergeben.

Parameter

Ein Dateisystem- oder Legacyfiltertreiber ruft IoGetCurrentIrpStackLocation mit dem angegebenen IRP auf, um einen Zeiger auf den eigenen Stapelspeicherort im IRP zu erhalten. In den folgenden Parametern verweist Irp auf den IRP und IrpSp auf die IO_STACK_LOCATION. Der Treiber kann die Informationen verwenden, die in den folgenden Elementen des IRP und des IRP-Stapelspeicherorts festgelegt sind, um eine Maillot-Erstellungsanforderung zu verarbeiten.

  • DeviceObject ist ein Zeiger auf das Zielgerätobjekt.

  • Irp->Flags ist für diese Anforderung auf die folgenden Flags festgelegt:

    • IRP_CREATE_OPERATION
    • IRP_DEFER_IO_COMPLETION
    • IRP_SYNCHRONOUS_API
  • Irp->IoStatus verweist auf eine IO_STATUS_BLOCK-Struktur, die den endgültigen Abschluss status und Informationen zum angeforderten Vorgang empfängt. Das Dateisystem legt den Information-Member dieser Struktur auf einen der folgenden Werte fest:

    • FILE_CREATED
    • FILE_OPENED
  • Irp->RequestorMode gibt den Ausführungsmodus des Prozesses an, der den Vorgang angefordert hat, entweder KernelMode oder UserMode. Wenn das SL_FORCE_ACCESS_CHECK-Flag festgelegt ist, müssen Zugriffsüberprüfungen durchgeführt werden, auch wenn Irp-RequestorMode>KernelMode ist.

  • IrpSp->MajorFunction ist auf IRP_MJ_CREATE_MAILSLOT festgelegt.

  • IrpSp->Flags können auf SL_FORCE_ACCESS_CHECK festgelegt werden. Wenn dieses Flag festgelegt ist, müssen Zugriffsüberprüfungen auch dann durchgeführt werden, wenn der Wert von Irp-RequestorMode>KernelMode ist.

  • *IrpSp->Parameters.CreateMailslot.SecurityContext-AccessState> ist ein Zeiger auf eine ACCESS_STATE Struktur, die den Betreffkontext des Objekts, gewährte Zugriffstypen und die verbleibenden gewünschten Zugriffstypen enthält.

  • IrpSp->Parameters.CreateMailslot.SecurityContext-DesiredAccess> ist eine ACCESS_MASK Struktur, die die für das maillot angeforderten Zugriffsrechte angibt. Weitere Informationen finden Sie in der Beschreibung des DesiredAccess-Parameters für IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.Options ist eine Bitmaske von Flags, die die Optionen angeben, die beim Erstellen oder Öffnen des Maillots angewendet werden sollen, und die Aktion, die ausgeführt werden soll, wenn das Mailslot bereits vorhanden ist.

    Die hohen 8 Bits dieses Parameters entsprechen dem Disposition-Parameter zu IoCreateFileSpecifyDeviceObjectHint.

    Die niedrigen 24 Bits dieses Members entsprechen dem CreateOptions-Parameter zu IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.ShareAccess ist eine Bitmaske von Freigabezugriffsrechten, die für das maillot angefordert werden. Wenn dieser Member null ist, wird exklusiver Zugriff angefordert. Weitere Informationen finden Sie in der Beschreibung des ShareAccess-Parameters für IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.Parameters ist ein Zeiger auf eine MAILSLOT_CREATE_PARAMETERS Struktur, die die Erstellungsparameter für den Zeitpunkt der Erstellung des Mailslots enthält.

  • IrpSp->FileObject ist ein Zeiger auf ein Dateiobjekt, das der E/A-Manager erstellt, um das zu erstellende oder zu öffnende Maillot darzustellen. Wenn das Dateisystem die IRP_MJ_CREATE_MAILSLOT-Anforderung verarbeitet, legt es die Felder FsContext und möglicherweise FsContext2 in diesem Dateiobjekt auf dateisystemspezifische Werte fest. Daher können die Werte der Felder FsContext und FsContext2 erst als gültig betrachtet werden, nachdem das Dateisystem die Erstellungsanforderung verarbeitet hat. Weitere Informationen finden Sie unter Dateistreams, Streamkontexte und Per-Stream Kontexte.

    IoCancelFileOpen (und FltCancelFileOpen) legen das FO_FILE_OPEN_CANCELLED-Flag im Feld Flags des Dateiobjekts fest. Das Festlegen dieses Flags gibt an, dass die IRP_MJ_CREATE_MAILSLOT Anforderung abgebrochen wurde, und für dieses Dateiobjekt wird eine IRP_MJ_CLOSE-Anforderung ausgegeben. Nachdem die Erstellungsanforderung abgebrochen wurde, kann sie nicht erneut ausgestellt werden.

    Der Parameter IrpSp-FileObject> enthält einen Zeiger auf das RelatedFileObject-Feld, das auch eine FILE_OBJECT-Struktur ist. Das Feld RelatedFileObject einer FILE_OBJECT-Struktur wird verwendet, um anzugeben, dass ein bestimmtes Maillot relativ zu einem bereits geöffneten Dateiobjekt geöffnet wurde. Dies gibt normalerweise an, dass die relative Datei ein Verzeichnis ist, streambasierte Dateien jedoch relativ zu einem bereits vorhandenen Datenstrom einer Datei geöffnet werden können. Das Feld RelatedFileObject der FILE_OBJECT-Struktur ist nur während der Verarbeitung von IRP_MJ_CREATE_MAILSLOT gültig.

Weitere Informationen

ACCESS_MASK

ACCESS_STATE

FLT_PARAMETERS

FLT_PARAMETERS für 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 (WDK-Kernelreferenz)

MAILSLOT_CREATE_PARAMETERS