FLT_PARAMETERS para IRP_MJ_DEVICE_CONTROL e união IRP_MJ_INTERNAL_DEVICE_CONTROL
Componente union usado quando o campo MajorFunction da estrutura FLT_IO_PARAMETER_BLOCK para a operação é IRP_MJ_DEVICE_CONTROL ou IRP_MJ_INTERNAL_DEVICE_CONTROL.
Sintaxe
typedef union _FLT_PARAMETERS {
... ;
union {
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
} Common;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Neither;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID SystemBuffer;
} Buffered;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputSystemBuffer;
PVOID OutputBuffer;
PMDL OutputMdlAddress;
} Direct;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID InputBuffer;
PVOID OutputBuffer;
} FastIo;
} DeviceIoControl;
... ;
} FLT_PARAMETERS, *PFLT_PARAMETERS;
Membros
Comum: componente Union usado para todos os métodos de buffer (Nenhum, Buffer e FastIo).
OutputBufferLength: comprimento, em bytes, do buffer para o qual o membro Neither.OutputBuffer, Direct.OutputBuffer ou FastIo.OutputBuffer aponta.
InputBufferLength: comprimento, em bytes, do buffer para o qual o membro Neither.InputBuffer, Buffered.SystemBuffer, Direct.InputSystemBuffer ou FastIo.InputBuffer aponta.
IoControlCode: código de função IOCTL a ser passado para o driver de dispositivo para o dispositivo de destino. Para obter informações detalhadas sobre solicitações IOCTL, 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 Microsoft Windows. (Esse recurso pode não estar disponível em alguns idiomas e países.)
Nenhum dos dois: componente union usado 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 no Guia de arquitetura do modo Kernel.
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 FltLockUserBuffer, incluindo todas as referências de buffer em blocos try/except . Para obter mais informações, consulte Using Neither Buffered nor Direct I/O and Errors in Referencing User-Space Addresses.
Neither.OutputBuffer: endereço virtual no 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 FltLockUserBuffer, incluindo todas as referências de buffer em blocos try/except . Para obter mais informações, consulte Using Neither Buffered nor Direct I/O and Errors in Referencing User-Space Addresses in the Kernel Mode Architecture Guide.
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.
Buffer: componente Union usado 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 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.
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 no 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 do 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 da lista de descritores de memória (MDL) para a 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 um MDL que descreve o buffer para o qual o membro Direct.OutputBuffer aponta. Esse membro é necessário e não pode ser NULL.
FastIo: componente Union usado quando a estrutura FLT_CALLBACK_DATA representa uma operação de IRP_MJ_DEVICE_CONTROL de E/S rápida.
FastIo.InputBuffer: endereço virtual no 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 FltLockUserBuffer, incluindo todas as referências de buffer em blocos try/except . Para obter mais informações, consulte Erros em Referenciar endereços User-Space.
FastIo.OutputBuffer: endereço virtual no 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 FltLockUserBuffer, incluindo todas as referências de buffer em blocos try/except . Para obter mais informações, consulte Erros em Referenciar endereços User-Space.
Comentários
A estrutura FLT_PARAMETERS para operações de IRP_MJ_DEVICE_CONTROL e IRP_MJ_INTERNAL_DEVICE_CONTROL contém os parâmetros para uma operação de informações de controle de E/S/E/do dispositivo baseada em IRP representada por uma estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA). Ele está contido em uma estrutura FLT_IO_PARAMETER_BLOCK .
IRP_MJ_DEVICE_CONTROL pode ser uma operação baseada em IRP ou uma operação de E/S rápida.
IRP_MJ_INTERNAL_DEVICE_CONTROL é uma operação de E/S baseada em IRP.
Requisitos
Tipo de Requisito | Requisito |
---|---|
parâmetro | Fltkernel.h (inclua Fltkernel.h) |