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:
- Per conto di un'applicazione in modalità utente che ha chiamato una funzione Microsoft Win32, ad esempio CreateMailslot.
- In alternativa, per conto di un componente in modalità kernel che ha chiamato IoCreateFile o IoCreateFileSpecifyDeviceObjectHint.
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
FLT_PARAMETERS per IRP_MJ_CREATE_MAILSLOT
IoCreateFileSpecifyDeviceObjectHint
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per