Condividi tramite


IRP_MJ_CREATE_MAILSLOT (fs e driver di filtro)

Data di invio

Gestione I/O invia la richiesta di IRP_MJ_CREATE_MAILSLOT quando viene creato o aperto un nuovo mailslot. In genere viene inviato questo provider di servizi di IRP:

Se la richiesta di creazione mailslot viene completata correttamente, l'applicazione o il componente in modalità kernel riceve un handle per l'istanza del file mailslot.

La gestione delle IRP_MJ_CREATE_MAILSLOT è molto uguale a quella di IRP_MJ_CREATE.

Operazione: driver del file system

Se l'oggetto dispositivo di destinazione è l'oggetto dispositivo di controllo del file system, la routine dispatch del driver del file system deve eseguire le operazioni seguenti:

  • Impostare Irp-IoStatus.Status> e Irp-IoStatus.Information> sui valori appropriati.
  • Completare l'IRP e restituire un valore NTSTATUS appropriato.

In caso contrario, il driver del file system deve elaborare la richiesta di creazione.

Operazione: driver di filtro del file system legacy

Se l'oggetto dispositivo di destinazione è l'oggetto dispositivo di controllo del driver di filtro legacy, la routine dispatch del driver deve completare l'IRP e restituire un valore NTSTATUS appropriato, dopo aver impostato Irp-IoStatus.Status> e Irp-IoStatus.Information> sui valori appropriati.

In caso contrario, il driver di filtro legacy deve eseguire qualsiasi elaborazione necessaria. A seconda della natura del filtro, deve completare l'IRP o passarlo al driver inferiore successivo nello stack.

In genere, i driver di filtro legacy non devono restituire STATUS_PENDING in risposta a IRP_MJ_CREATE_MAILSLOT. Tuttavia, se un driver di livello inferiore restituisce STATUS_PENDING, il driver di filtro legacy deve passare questo valore di stato fino alla catena di driver.

Parametri

Un file system o un driver di filtro legacy chiama IoGetCurrentIrpStackLocation con l'IRP specificato per ottenere un puntatore alla propria posizione dello stack in IRP. Nei parametri seguenti Irp punta a IRP e IrpSp punta al IO_STACK_LOCATION. Il driver può usare le informazioni impostate nei membri seguenti dell'IRP e del percorso dello stack IRP per elaborare una richiesta mailslot.

  • DeviceObject è un puntatore all'oggetto dispositivo di destinazione.

  • Irp->I flag sono impostati sui flag seguenti per questa richiesta:

    • IRP_CREATE_OPERATION
    • IRP_DEFER_IO_COMPLETION
    • IRP_SYNCHRONOUS_API
  • Irp->IoStatus punta a una struttura IO_STATUS_BLOCK che riceve lo stato di completamento finale e le informazioni sull'operazione richiesta. Il file system imposta il membro Information di questa struttura su uno dei valori seguenti:

    • FILE_CREATED
    • FILE_OPENED
  • Irp->RequestorMode indica la modalità di esecuzione del processo che ha richiesto l'operazione, Ovvero KernelMode o UserMode. Se il flag SL_FORCE_ACCESS_CHECK è impostato, è necessario eseguire i controlli di accesso, anche se Irp-RequestorMode> è KernelMode.

  • IrpSp->MajorFunction è impostato su IRP_MJ_CREATE_MAILSLOT.

  • IrpSp->I flag possono essere impostati su SL_FORCE_ACCESS_CHECK. Se questo flag è impostato, i controlli di accesso devono essere eseguiti anche se il valore di Irp-RequestorMode> è KernelMode.

  • *IrpSp->Parameters.CreateMailslot.SecurityContext-AccessState> è un puntatore a una struttura ACCESS_STATE contenente il contesto soggetto dell'oggetto, i tipi di accesso concessi e i tipi di accesso rimanenti desiderati.

  • IrpSp->Parameters.CreateMailslot.SecurityContext-DesiredAccess> è una struttura ACCESS_MASK che specifica i diritti di accesso richiesti per mailslot. Per altre informazioni, vedere la descrizione del parametro DesiredAccess in IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.Options è una maschera di bit di flag che specificano le opzioni da applicare durante la creazione o l'apertura del file mailslot e l'azione da eseguire se il mailslot esiste già.

    I 8 bit alti di questo parametro corrispondono al parametro Disposition a IoCreateFileSpecifyDeviceObjectHint.

    I 24 bit bassi di questo membro corrispondono al parametro CreateOptions a IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.ShareAccess è una maschera di bit dei diritti di accesso di condivisione richiesti per mailslot. Se questo membro è zero, viene richiesto l'accesso esclusivo. Per altre informazioni, vedere la descrizione del parametro ShareAccess in IoCreateFileSpecifyDeviceObjectHint.

  • IrpSp->Parameters.CreateMailslot.Parameters è un puntatore a una struttura MAILSLOT_CREATE_PARAMETERS che contiene i parametri di creazione per quando viene creato il file mailslot.

  • IrpSp->FileObject è un puntatore a un oggetto file creato da Gestione I/O per rappresentare il file mailslot da creare o aprire. Quando il file system elabora la richiesta di IRP_MJ_CREATE_MAILSLOT, imposta i campi FsContext e possibilmente FsContext2 in questo oggetto file su valori specifici del file system. Pertanto, i valori dei campi FsContext e FsContext2 non possono essere considerati validi fino a quando il file system non ha elaborato la richiesta di creazione. Per altre informazioni, vedere Flussi di file, contesti di flusso e contesti di Per-Stream.

    IoCancelFileOpen (e FltCancelFileOpen) imposta il flag FO_FILE_OPEN_CANCELLED nel campo Flags dell'oggetto file. L'impostazione di questo flag indica che la richiesta di IRP_MJ_CREATE_MAILSLOT è stata annullata e verrà inviata una richiesta di IRP_MJ_CLOSE per questo oggetto file. Una volta annullata la richiesta di creazione, non può essere ristampata.

    Il parametro IrpSp-FileObject> contiene un puntatore al campo RelatedFileObject, che è anche una struttura FILE_OBJECT. Il campo RelatedFileObject di una struttura FILE_OBJECT viene utilizzato per indicare che un determinato oggetto mailslot è stato aperto rispetto a un oggetto file già aperto. Ciò indica in genere che il file relativo è una directory, ma i file basati su flusso possono essere aperti rispetto a un flusso già esistente di un file. Il campo RelatedFileObject della struttura FILE_OBJECT è valido solo durante l'elaborazione di IRP_MJ_CREATE_MAILSLOT.

Vedi anche

ACCESS_MASK

ACCESS_STATE

FLT_PARAMETERS

FLT_PARAMETERS per 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 (informazioni di riferimento sul kernel WDK)

MAILSLOT_CREATE_PARAMETERS