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:

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

ACCESS_MASK

ACCESS_STATE

FLT_PARAMETERS

FLT_PARAMETERS para 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 (Referência de Kernel do WDK)

MAILSLOT_CREATE_PARAMETERS