Share via


IRP_MJ_FILE_SYSTEM_CONTROL (FS e drivers de filtro)

Quando enviado

O Gerenciador de E/S, outros componentes do sistema operacional e outros drivers do modo kernel enviam solicitações de IRP_MJ_FILE_SYSTEM_CONTROL. Ele pode ser enviado, por exemplo, quando um aplicativo de modo de usuário chama a função Win32 DeviceIoControl para enviar uma solicitação de FSCTL (controle de E/S do sistema de arquivos).

Operação: Drivers do sistema de arquivos

O driver ou reconhecedor do sistema de arquivos deve marcar o código de função secundária para determinar qual operação de controle do sistema de arquivos é solicitada.

Os drivers do sistema de arquivos devem lidar com os seguintes códigos de função secundárias:

Código Descrição
IRP_MN_KERNEL_CALL Essa solicitação é a mesma que IRP_MN_USER_FS_REQUEST (descrito a seguir), exceto que a origem da solicitação é um componente de kernel confiável.
IRP_MN_MOUNT_VOLUME Indica uma solicitação de montagem de volume. Se um driver do sistema de arquivos receber esse IRP para um volume cujo formato não corresponde ao do sistema de arquivos, o driver do sistema de arquivos deverá retornar STATUS_UNRECOGNIZED_VOLUME.
IRP_MN_USER_FS_REQUEST Indica uma solicitação FSCTL, possivelmente em nome de um aplicativo de modo de usuário que chamou a função DeviceIoControl do Microsoft Win32 ou em nome de um componente do modo kernel chamado ZwDeviceIoControlFile ou IoBuildDeviceIoControlRequest. Para obter informações detalhadas sobre solicitações FSCTL, consulte "Códigos de controle de entrada e saída do dispositivo" na documentação do SDK do Windows.
IRP_MN_VERIFY_VOLUME Indica uma solicitação de verificação de volume. Para mídia removível, o sistema de arquivos deve verificar o volume quando detecta que a mídia foi removida e retornada para garantir que ainda seja o mesmo volume conhecido. Se o volume tiver sido alterado, o sistema de arquivos deverá invalidar todos os identificadores pendentes. Ele também deverá retornar um erro se o sistema de arquivos nessa nova mídia tiver sido alterado. Essa solicitação é usada com mais frequência para unidades disquetes.

Os reconhecedores do sistema de arquivos devem lidar com o seguinte código de função secundária:

Código Descrição
IRP_MN_LOAD_FILE_SYSTEM Indica uma solicitação do sistema de arquivos de carga.

O driver ou reconhecedor do sistema de arquivos deve executar a operação solicitada e, em seguida, concluir o IRP.

Operação: Drivers de filtro do sistema de arquivos herdados

O driver de filtro deve passar esse IRP para o driver mais baixo na pilha.

Parâmetros

Um sistema de arquivos ou driver de filtro chama IoGetCurrentIrpStackLocation para 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 local da pilha IRP e IRP para processar uma solicitação de controle do sistema de arquivos:

  • DeviceObject é um ponteiro para o objeto de dispositivo de destino.

  • Irp->AssociatedIrp.SystemBuffer aponta para um buffer de entrada fornecido pelo sistema a ser passado para o sistema de arquivos ou o driver de filtro do sistema de arquivos para o volume de destino. Usado para E/S METHOD_BUFFERED ou METHOD_DIRECT. Se esse parâmetro é necessário depende do código de controle do sistema de arquivos específico.

  • 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.

  • Irp->MdlAddress é o endereço de uma MDL (lista de descritores de memória) que descreve um buffer de saída a ser passado para o sistema de arquivos ou o driver de filtro do sistema de arquivos para o volume de destino. Usado para METHOD_DIRECT E/S. Se esse parâmetro é necessário depende do código de controle de E/S específico.

  • Irp->UserBuffer aponta para um buffer de saída fornecido pelo chamador a ser passado para o sistema de arquivos ou o driver de filtro do sistema de arquivos para o volume de destino. Usado para E/S METHOD_BUFFERED ou METHOD_NEITHER. Se esse parâmetro é opcional ou obrigatório depende do código de controle de E/S específico.

  • IrpSp->FileObject aponta para o objeto de arquivo associado a DeviceObject.

    O parâmetro IrpSp-FileObject> contém um ponteiro para o campo RelatedFileObject, que também é uma estrutura FILE_OBJECT. O campo RelatedFileObject da estrutura FILE_OBJECT não é válido durante o processamento de IRP_MJ_FILE_SYSTEM_CONTROL e não deve ser usado.

  • IrpSp->Os sinalizadores podem ser definidos como SL_ALLOW_RAW_MOUNT para IRP_MN_VERIFY_VOLUME.

  • IrpSp->MajorFunction é definido como IRP_MJ_FILE_SYSTEM_CONTROL.

  • IrpSp->MinorFunction pode ser definido como um dos valores a seguir.

    • IRP_MN_KERNEL_CALL
    • IRP_MN_LOAD_FILE_SYSTEM
    • IRP_MN_MOUNT_VOLUME
    • IRP_MN_USER_FS_REQUEST
    • IRP_MN_VERIFY_VOLUME
  • IrpSp->Parameters.FileSystemControl.FsControlCode é o código de função FSCTL a ser passado para o sistema de arquivos ou o driver de filtro do sistema de arquivos para o volume de destino. Para uso apenas com IRP_MN_USER_FS_REQUEST.

    Para obter informações detalhadas sobre solicitações IOCTL e FSCTL, consulte Usando códigos de controle de E/S e "Códigos de controle de entrada e saída do dispositivo" na documentação do SDK do Windows.

  • IrpSp->Parameters.FileSystemControl.InputBufferLength é o tamanho em bytes do buffer apontado por Irp-AssociatedIrp.SystemBuffer>.

  • IrpSp->Parameters.FileSystemControl.OutputBufferLength é o tamanho em bytes do buffer apontado por Irp-UserBuffer>.

  • IrpSp->Parameters.FileSystemControl.Type3InputBuffer é o buffer de entrada para solicitações no modo kernel usando METHOD_NEITHER.

  • IrpSp->Parameters.MountVolume.DeviceObject aponta para o objeto do dispositivo para o dispositivo real no qual o volume deve ser montado. Os drivers de filtro do sistema de arquivos não devem usar esse parâmetro.

  • IrpSp->Parameters.MountVolume.Vpb aponta para o VPB (bloco de parâmetros de volume) para o volume a ser montado. Sistemas de arquivos que dão suporte a mídia removível podem substituir um VPB usado anteriormente para aquele passado nesse parâmetro. Nesses sistemas de arquivos, depois que o volume é montado, esse ponteiro não pode mais ser considerado válido. Os drivers de filtro do sistema de arquivos que filtram esses sistemas de arquivos devem usar esse parâmetro da seguinte maneira: o filtro deve salvar o valor de IrpSp-Parameters.MountVolume.Vpb-RealDevice>> antes de enviar o IRP para drivers de nível inferior. Depois que o volume for montado com êxito, o filtro poderá usar esse ponteiro para o objeto de dispositivo de armazenamento para obter o ponteiro VPB correto.

  • IrpSp->Parameters.VerifyVolume.DeviceObject aponta para o objeto do dispositivo para que o volume seja verificado.

  • IrpSp->Parameters.VerifyVolume.Vpb aponta para o VPB para que o volume seja verificado.

Confira também

IO_STACK_LOCATION

IO_STATUS_BLOCK

IoBuildAsynchronousFsdRequest

IoBuildDeviceIoControlRequest

IoBuildSynchronousFsdRequest

IoGetCurrentIrpStackLocation

IRP

ZwDeviceIoControlFile