Compartilhar via


Função FltGetSwappedBufferMdlAddress (fltkernel.h)

A rotina FltGetSwappedBufferMdlAddress retorna o endereço MDL (lista de descritores de memória) para 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.

Valor de retorno

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 trocou buffers na rotina de retorno de chamada de pré-operação.

Observações

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 NULL não MDL, mesmo que o chamador não tenha criado um MDL para o buffer em que ele trocou. Isso acontece quando um MDL é criado para o buffer por um driver de minifiltro, driver de filtro herdado ou driver do sistema de arquivos que está abaixo do chamador na pilha do driver do minifiltro ou do driver do sistema de arquivos.

Também é possível que FltGetSwappedBufferMdlAddress retorne um valor NULL não MDL, mesmo que o chamador não tenha alternado 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 do postoperation é retornada. 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
da Plataforma de Destino Universal
cabeçalho fltkernel.h (inclua Fltkernel.h)
biblioteca FltMgr.lib
de DLL Fltmgr.sys
IRQL Qualquer nível

Consulte também

FltDecodeParameters

FltRetainSwappedBufferMdlAddress