Função FltDecodeParameters (fltkernel.h)

FltDecodeParameters retorna ponteiros para o endereço MDL (lista de descritores de memória), ponteiro de buffer, comprimento do buffer e parâmetros de acesso desejados para uma operação de E/S. Isso salva os drivers de minifiltro de ter uma instrução switch para localizar a posição desses parâmetros em rotinas auxiliares que acessam o endereço MDL, o ponteiro do buffer, o comprimento do buffer e o acesso desejado para vários tipos de operação.

Sintaxe

NTSTATUS FLTAPI FltDecodeParameters(
  [in]            PFLT_CALLBACK_DATA CallbackData,
  [out]           PMDL               **MdlAddressPointer,
  [out]           PVOID              **Buffer,
  [out]           PULONG             *Length,
  [out, optional] LOCK_OPERATION     *DesiredAccess
);

Parâmetros

[in] CallbackData

Ponteiro para a estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) para a operação de E/S.

[out] MdlAddressPointer

Ponteiro para uma variável fornecida pelo chamador que recebe um ponteiro para o membro MdlAddress (ou OutputMdlAddress) da estrutura do parâmetro de dados de retorno de chamada (FLT_PARAMETERS) (observe que esse membro é um ponteiro). Esse parâmetro é opcional e pode ser NULL. Se a operação de E/S não tiver um campo MDL, esse parâmetro receberá NULL.

[out] Buffer

Ponteiro para uma variável fornecida pelo chamador que recebe um ponteiro para o membro de buffer apropriado (dependendo do código de função principal) na estrutura do parâmetro de dados de retorno de chamada (observe que esse membro é um ponteiro).

[out] Length

Ponteiro para uma variável fornecida pelo chamador que recebe um ponteiro para o membro de comprimento do buffer na estrutura do parâmetro de dados de retorno de chamada. Se a operação não tiver um campo de comprimento, esse parâmetro receberá NULL.

[out, optional] DesiredAccess

Ponteiro para uma variável fornecida pelo chamador que recebe o tipo de acesso apropriado para esse tipo de operação de E/S, uma de IoReadAccess, IoWriteAccess ou IoModifyAccess. IoReadAccess significa que o driver de minifiltro pode examinar o conteúdo do buffer, mas não pode alterar o conteúdo em vigor. IoWriteAccess e IoModifyAccess, que são equivalentes, significam que o driver de minifiltro tem acesso de leitura e gravação ao buffer.

Retornar valor

FltDecodeParameters retorna STATUS_SUCCESS ou um valor NTSTATUS apropriado, como o seguinte:

Código de retorno Descrição
STATUS_INVALID_PARAMETER A estrutura de dados de retorno de chamada (FLT_CALLBACK_DATA) representa uma operação de E/S que não tem parâmetros de buffer. Este é um código de erro.

Comentários

FltDecodeParameters retorna ponteiros para os parâmetros de uma operação de E/S, em vez dos valores de parâmetro, para que o chamador possa modificar os valores dos parâmetros, se desejado.

FltDecodeParameters pode ser usado para operações rápidas de E/S, bem como operações baseadas em IRP. Não é significativo para operações de retorno de chamada FSFilter (filtro do sistema de arquivos), pois essas operações não têm parâmetros de buffer.

As operações IOCTL e FSCTL podem ter um ou dois buffers, dependendo do método de buffer usado. Nos casos em que a operação tem dois buffers (e dois campos de comprimento), FltDecodeParameters retorna os campos OutputBuffer, OutputBufferLength e/ou OutputMdlAddress , conforme apropriado.

Nem todos os quatro parâmetros são retornados para cada operação de E/S. Por exemplo, para uma solicitação de IRP_MJ_READ, FltDecodeParameters define os parâmetros de saída da seguinte maneira.

Parâmetro Valor
MdlAddressPointer &(CallbackData-Iopb-Parameters.Read.MdlAddress>>)
Buffer &(CallbackData-Iopb-Parameters.Read.ReadBuffer>>)
Comprimento &(CallbackData-Iopb-Parameters.Read.Length>>)
DesiredAccess IoWriteAccess

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
Biblioteca FltMgr.lib
IRQL Qualquer nível

Confira também

FLT_CALLBACK_DATA

FLT_IS_FASTIO_OPERATION

FLT_IS_FS_FILTER_OPERATION

FLT_IS_IRP_OPERATION

FLT_PARAMETERS

FltLockUserBuffer