IRP_MJ_CREATE_MAILSLOT (FS e drivers de filtro)
Quando enviado
O Gerenciador de E/S envia a solicitação IRP_MJ_CREATE_MAILSLOT quando um novo emaillot está sendo criado ou aberto. Normalmente, esse IRP é enviado:
- Em nome de um aplicativo de modo de usuário que chamou uma função do Microsoft Win32, como CreateMailslot.
- Ou, em nome de um componente do modo kernel chamado IoCreateFile ou IoCreateFileSpecifyDeviceObjectHint.
Se a solicitação de criação de emaillot for concluída com êxito, o componente do aplicativo ou do modo kernel receberá um identificador para a instância do arquivo maillot.
O tratamento de IRP_MJ_CREATE_MAILSLOT é o mesmo que IRP_MJ_CREATE.
Operação: Drivers do sistema de arquivos
Se o objeto de dispositivo de destino for o objeto do dispositivo de controle do sistema de arquivos, a rotina de expedição do driver do sistema de arquivos deverá fazer as seguintes operações:
- Defina Irp-IoStatus.Status> e Irp-IoStatus.Information> como valores apropriados.
- Conclua o IRP e retorne um valor NTSTATUS apropriado.
Caso contrário, o driver do sistema de arquivos deverá processar a solicitação de criação.
Operação: Drivers de filtro do sistema de arquivos herdado
Se o objeto de dispositivo de destino for o objeto de dispositivo de controle do driver de filtro herdado, a rotina de expedição desse driver deverá concluir o IRP e retornar um valor NTSTATUS apropriado, depois de definir Irp-IoStatus.Status> e Irp-IoStatus.Information> como valores apropriados.
Caso contrário, o driver de filtro herdado deverá executar qualquer processamento necessário. Dependendo da natureza do filtro, ele deve concluir o IRP ou passá-lo para o driver mais baixo na pilha.
Geralmente, os drivers de filtro herdados não devem retornar STATUS_PENDING em resposta a IRP_MJ_CREATE_MAILSLOT. No entanto, se um driver de nível inferior retornar STATUS_PENDING, o driver de filtro herdado deverá passar esse valor status para cima na cadeia de driver.
Parâmetros
Um sistema de arquivos ou driver de filtro herdado chama IoGetCurrentIrpStackLocation com o IRP fornecido para obter um ponteiro para seu próprio local de pilha no IRP. Nos parâmetros a seguir, Irp aponta para o IRP e IrpSp aponta para o IO_STACK_LOCATION. O driver pode usar as informações definidas nos seguintes membros do IRP e no local da pilha IRP para processar uma solicitação create maillot.
DeviceObject é um ponteiro para o objeto de dispositivo de destino.
Irp->Os sinalizadores são definidos como os seguintes sinalizadores para esta solicitação:
- IRP_CREATE_OPERATION
- IRP_DEFER_IO_COMPLETION
- IRP_SYNCHRONOUS_API
Irp->O IoStatus aponta para uma estrutura de IO_STATUS_BLOCK que recebe o status de conclusão final e informações sobre a operação solicitada. O sistema de arquivos define o membro Informações dessa estrutura como um dos seguintes valores:
- FILE_CREATED
- FILE_OPENED
Irp->RequestorMode indica o modo de execução do processo que solicitou a operação, KernelMode ou UserMode. Se o sinalizador SL_FORCE_ACCESS_CHECK estiver definido, as verificações de acesso deverão ser executadas, mesmo que Irp-RequestorMode> seja KernelMode.
IrpSp->MajorFunction está definido como IRP_MJ_CREATE_MAILSLOT.
IrpSp->Os sinalizadores podem ser definidos como SL_FORCE_ACCESS_CHECK. Se esse sinalizador estiver definido, as verificações de acesso deverão ser executadas mesmo se o valor de Irp-RequestorMode> for KernelMode.
*IrpSp->Parameters.CreateMailslot.SecurityContext-AccessState> é um ponteiro para uma estrutura ACCESS_STATE que contém o contexto de assunto do objeto, os tipos de acesso concedidos e os tipos de acesso desejados restantes.
IrpSp->Parameters.CreateMailslot.SecurityContext-DesiredAccess> é uma estrutura ACCESS_MASK que especifica os direitos de acesso solicitados para o maillot. Para obter mais informações, consulte a descrição do parâmetro DesiredAccess para IoCreateFileSpecifyDeviceObjectHint.
IrpSp->Parameters.CreateMailslot.Options é uma máscara de bits de sinalizadores que especificam as opções a serem aplicadas ao criar ou abrir o maillot e a ação a ser tomada se o maillot já existir.
Os 8 bits altos desse parâmetro correspondem ao parâmetro Disposition para IoCreateFileSpecifyDeviceObjectHint.
Os 24 bits baixos desse membro correspondem ao parâmetro CreateOptions para IoCreateFileSpecifyDeviceObjectHint.
IrpSp->Parameters.CreateMailslot.ShareAccess é uma máscara de bits dos direitos de acesso de compartilhamento solicitados para o maillot. Se esse membro for zero, o acesso exclusivo será solicitado. Para obter mais informações, consulte a descrição do parâmetro ShareAccess para IoCreateFileSpecifyDeviceObjectHint.
IrpSp->Parameters.CreateMailslot.Parameters é um ponteiro para uma estrutura MAILSLOT_CREATE_PARAMETERS que contém os parâmetros de criação para quando o maillot está sendo criado.
IrpSp->FileObject é um ponteiro para um objeto de arquivo que o Gerenciador de E/S cria para representar o maillot a ser criado ou aberto. Quando o sistema de arquivos processa a solicitação IRP_MJ_CREATE_MAILSLOT, ele define os campos FsContext e possivelmente FsContext2 neste objeto de arquivo como valores específicos do sistema de arquivos. Portanto, os valores dos campos FsContext e FsContext2 não podem ser considerados válidos até que o sistema de arquivos tenha processado a solicitação de criação. Para obter mais informações, consulte Fluxos de arquivos, contextos de fluxo e contextos de Per-Stream.
IoCancelFileOpen (e FltCancelFileOpen) definem o sinalizador FO_FILE_OPEN_CANCELLED no campo Sinalizadores do objeto de arquivo. Definir esse sinalizador indica que a solicitação IRP_MJ_CREATE_MAILSLOT foi cancelada e uma solicitação de IRP_MJ_CLOSE será emitida para esse objeto de arquivo. Depois que a solicitação de criação for cancelada, ela não poderá ser reemissada.
O parâmetro IrpSp-FileObject> contém um ponteiro para o campo RelatedFileObject, que também é uma estrutura FILE_OBJECT. O campo RelatedFileObject de uma estrutura FILE_OBJECT é usado para indicar que um determinado maillot foi aberto em relação a um objeto de arquivo já aberto. Isso geralmente indica que o arquivo relativo é um diretório, mas arquivos baseados em fluxo podem ser abertos em relação a um fluxo já existente de um arquivo. O campo RelatedFileObject da estrutura FILE_OBJECT só é válido durante o processamento de IRP_MJ_CREATE_MAILSLOT.
Confira também
FLT_PARAMETERS para IRP_MJ_CREATE_MAILSLOT
IoCreateFileSpecifyDeviceObjectHint
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de