Função FltGetSwappedBufferMdlAddress (fltkernel.h)

A rotina FltGetSwappedBufferMdlAddress retorna o endereço MDL (lista de descritores de memória) de um buffer que foi trocado por um driver de minifiltro.

Sintaxe

PMDL FltGetSwappedBufferMdlAddress(
  [in] PFLT_CALLBACK_DATA CallbackData
);

Parâmetros

[in] CallbackData

Ponteiro para a estrutura de dados de retorno de chamada para a operação.

Retornar valor

FltGetSwappedBufferMdlAddress retorna o endereço MDL para o buffer que foi trocado pelo chamador. FltGetSwappedBufferMdlAddress retorna NULL nos seguintes casos:

  • A operação é uma operação de E/S rápida. Em uma operação de E/S rápida, o buffer não pode ter um MDL.
  • O buffer que foi trocado pelo chamador não tem um MDL.
  • O driver de minifiltro não alternou buffers na rotina de retorno de chamada de pré-operação.

Comentários

Um driver de minifiltro que troca em um novo buffer em uma rotina de retorno de chamada de pré-operação pode obter o endereço MDL para o buffer chamando FltGetSwappedBufferMdlAddress da rotina de retorno de chamada de postoperation correspondente.

A rotina FltGetSwappedBufferMdlAddress é necessária porque a rotina de retorno de chamada do postoperation recebe uma estrutura de dados de retorno de chamada que contém o buffer original e o endereço MDL, não os que foram trocados pela rotina de retorno de chamada de pré-operação do chamador.

É possível que FltGetSwappedBufferMdlAddress retorne um valor MDL não NULL , mesmo que o chamador não tenha criado um MDL para o buffer no qual ele foi trocado. Isso acontece quando um MDL é criado para o buffer por um driver de minifiltro, um driver de filtro herdado ou um driver do sistema de arquivos que está abaixo do chamador na pilha do driver de minifiltro ou do driver do sistema de arquivos.

Também é possível que FltGetSwappedBufferMdlAddress retorne um valor MDL não NULL mesmo que o chamador não tenha trocado em um novo buffer em sua rotina de retorno de chamada de pré-operação. Isso acontece em operações, como E/S de paginação, em que o buffer é NULL e o chamador troca em um novo endereço MDL.

O MDL para o buffer que foi trocado pelo chamador é liberado automaticamente pelo Gerenciador de Filtros quando a rotina de retorno de chamada de postoperation retorna. Para impedir que esse MDL seja liberado, chame FltRetainSwappedBufferMdlAddress.

FltGetSwappedBufferMdlAddress só pode ser chamado de uma rotina de retorno de chamada de postoperation.

Requisitos

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

Confira também

FltDecodeParameters

FltRetainSwappedBufferMdlAddress