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 |