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) |