Partilhar via


FLT_PARAMETERS para união IRP_MJ_FILE_SYSTEM_CONTROL

Componente union usado quando o campo MajorFunction da estrutura FLT_IO_PARAMETER_BLOCK para a operação é IRP_MJ_FILE_SYSTEM_CONTROL.

Sintaxe

typedef union _FLT_PARAMETERS {
  ...   ;
  union {
    struct {
      PVPB           Vpb;
      PDEVICE_OBJECT DeviceObject;
    } VerifyVolume;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
    } Common;
    struct {
      ULONG                    OutputBufferLength;
      ULONG POINTER_ALIGNMENT  InputBufferLength;
      ULONG POINTER_ALIGNMENT  FsControlCode;
      PVOID                    InputBuffer;
      PVOID                    OutputBuffer;
      PMDL                     OutputMdlAddress;
    } Neither;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   SystemBuffer;
    } Buffered;
    struct {
      ULONG                   OutputBufferLength;
      ULONG POINTER_ALIGNMENT InputBufferLength;
      ULONG POINTER_ALIGNMENT FsControlCode;
      PVOID                   InputSystemBuffer;
      PVOID                   OutputBuffer;
      PMDL                    OutputMdlAddress;
    } Direct;
  } FileSystemControl;
  ...   ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;

Membros

  • FileSystemControl: estrutura que contém os seguintes membros.

  • VerifyVolume: componente union usado para operações de IRP_MN_VERIFY_VOLUME.

  • Vpb: ponteiro para o VPB (bloco de parâmetros de volume) para que o volume seja verificado.

  • DeviceObject: ponteiro para o objeto do dispositivo para que o volume seja verificado.

  • Comum: componente union usado para todos os métodos de buffer para operações de IRP_MN_KERNEL_CALL e IRP_MN_USER_FS_REQUEST.

  • Common.OutputBufferLength: comprimento, em bytes, do buffer para o qual o membro Neither.OutputBuffer ou Direct.OutputBuffer aponta.

  • Common.InputBufferLength: comprimento, em bytes, do buffer para o qual o membro Neither.InputBuffer, Buffered.SystemBuffer ou Direct.InputSystemBuffer aponta.

  • Common.FsControlCode: código de função FSCTL a ser passado para o sistema de arquivos, filtro do sistema de arquivos ou driver de minifiltro para o dispositivo de destino.

Para obter informações detalhadas sobre solicitações IOCTL e FSCTL, consulte Usando códigos de controle de E/S no Guia de Arquitetura do Modo Kernel e "Códigos de Controle de Entrada e Saída do Dispositivo" na documentação do SDK do Microsoft Windows. (Esse recurso pode não estar disponível em alguns idiomas e países.)

  • Nenhum dos dois: componente union usado para operações de IRP_MN_KERNEL_CALL e IRP_MN_USER_FS_REQUEST quando o método de buffer é METHOD_NEITHER. Para obter mais informações sobre métodos de buffer, consulte Definindo códigos de controle de E/S.

  • Neither.InputBuffer: endereço virtual do modo de usuário do buffer de entrada que o solicitante original da operação forneceu. O Gerenciador de E/S e o Gerenciador de Filtros não validam esses endereços. Para garantir que os endereços de espaço do usuário sejam válidos, o minifiltro deve usar rotinas como ProbeForRead, ProbeForWrite e MmProbeAndLockPages, incluindo todas as referências de buffer em blocos try/except . Para obter mais informações, consulte Usando nem e/S em buffer nem E/S direta e Erros em Referenciando endereços User-Space.

  • Neither.OutputBuffer: endereço virtual do modo de usuário do buffer de saída que o solicitante original da operação forneceu. O Gerenciador de E/S e o Gerenciador de Filtros não validam esses endereços. Para garantir que os endereços de espaço do usuário sejam válidos, o minifiltro deve usar rotinas como ProbeForRead, ProbeForWrite e MmProbeAndLockPages, incluindo todas as referências de buffer em blocos try/except . Para obter mais informações, consulte Usando nem e/S em buffer nem E/S direta e Erros em Referenciando endereços User-Space. Neither.OutputBuffer é opcional e pode ser NULL se um MDL for fornecido em Neither.OutputMdlAddress. Veja os Comentários.

  • Neither.OutputMdlAddress: endereço de uma MDL (lista de descritores de memória) que descreve o buffer para o qual o membro Neither.OutputBuffer aponta. Esse membro é opcional e pode ser NULL se um buffer for fornecido em Neither.OutputBuffer.

  • Buffer: componente Union usado para operações de IRP_MN_KERNEL_CALL e IRP_MN_USER_FS_REQUEST quando o método de buffer é METHOD_BUFFERED. Para obter mais informações sobre métodos de buffer, consulte Definindo códigos de controle de E/S.

  • Buffered.SystemBuffer: endereço do buffer alocado pelo sistema para a operação. Em METHOD_BUFFERED E/S, esse buffer é usado para entrada e saída. Para obter mais informações, consulte Métodos para acessar buffers de dados.

  • Direct: componente Union usado para operações de IRP_MN_KERNEL_CALL e IRP_MN_USER_FS_REQUEST quando o método de buffer é METHOD_IN_DIRECT ou METHOD_OUT_DIRECT. Para obter mais informações sobre métodos de buffer, consulte Definindo códigos de controle de E/S no Guia de Arquitetura do Modo Kernel.

  • Direct.InputSystemBuffer: endereço do buffer de entrada para a operação. Esse buffer é bloqueado pelo sistema operacional para que seja seguro acessar no modo kernel. Para obter mais informações, consulte Métodos para acessar buffers de dados.

  • Direct.OutputBuffer: endereço virtual do modo de usuário do buffer de saída que o solicitante original da operação forneceu. Em E/S direta, ao contrário METHOD_NEITHER E/S, o sistema operacional bloqueia esse buffer para que seja seguro acessar no modo kernel, desde que o minifiltro esteja no mesmo contexto de processo que o solicitante original da operação de E/S. (Caso contrário, ele deverá chamar MmGetSystemAddressForMdlSafe para obter o endereço do sistema do MDL para o qual o membro OutputMdlAddress aponta.) Para obter mais informações, consulte Usando E/S direta e erros em E/S direta.

  • Direct.OutputMdlAddress: endereço de uma MDL (lista de descritores de memória) que descreve o buffer para o qual o membro Direct.OutputBuffer aponta. Esse membro é necessário e não pode ser NULL.

Comentários

A estrutura FLT_PARAMETERS para operações de IRP_MJ_FILE_SYSTEM_CONTROL contém os parâmetros de uma operação file-system-control-information representada por uma estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA). Ele está contido em uma estrutura FLT_IO_PARAMETER_BLOCK .

Se um buffer Neither.OutputBuffer e Nem.MdlAddress for fornecido, é recomendável que os minifiltros usem o MDL.

Se um minifiltro alterar o valor de Neither.MdlAddress, após o retorno de chamada pós-operação, o Gerenciador de Filtros liberará o MDL armazenado atualmente em Neither.MdlAddress e restaurará o valor anterior de Neither.MdlAddress.

IRP_MJ_FILE_SYSTEM_CONTROL é uma operação baseada em IRP.

Requisitos

Tipo de Requisito Requisito
parâmetro Fltkernel.h (inclua Fltkernel.h)

Confira também

FLT_CALLBACK_DATA

FLT_IO_PARAMETER_BLOCK

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltFsControlFile

IoBuildAsynchronousFsdRequest

IoBuildSynchronousFsdRequest

IoVerifyVolume

IRP_MJ_FILE_SYSTEM_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwFsControlFile