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)

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

FltDeviceIoControlFile

FltLockUserBuffer

IoBuildDeviceIoControlRequest

IRP_MJ_DEVICE_CONTROL

IRP_MJ_INTERNAL_DEVICE_CONTROL

MmGetSystemAddressForMdlSafe

MmProbeAndLockPages

ProbeForRead

ProbeForWrite

ZwDeviceIoControlFile