Função FltAllocateContext (fltkernel.h)

A rotina FltAllocateContext aloca uma estrutura de contexto para um tipo de contexto especificado.

Sintaxe

NTSTATUS FLTAPI FltAllocateContext(
  [in]  PFLT_FILTER      Filter,
  [in]  FLT_CONTEXT_TYPE ContextType,
  [in]  SIZE_T           ContextSize,
  [in]  POOL_TYPE        PoolType,
  [out] PFLT_CONTEXT     *ReturnedContext
);

Parâmetros

[in] Filter

Ponteiro de filtro opaco para o chamador. Esse parâmetro é necessário e não pode ser NULL.

[in] ContextType

Um valor FLT_CONTEXT_TYPE que indica o tipo de contexto a ser alocado. ContextType pode ser um dos seguintes:

Valor Significado
FLT_VOLUME_CONTEXT (0x0001) Alocar um contexto de volume.
FLT_INSTANCE_CONTEXT (0x0002) Alocar um contexto de instância.
FLT_FILE_CONTEXT (0x0004) Alocar um contexto de arquivo.
FLT_STREAM_CONTEXT (0x0008) Alocar um contexto de fluxo.
FLT_STREAMHANDLE_CONTEXT (0x0010) Alocar um contexto de identificador de fluxo.
FLT_TRANSACTION_CONTEXT (0x0020) Alocar um contexto de transação.
FLT_SECTION_CONTEXT (0x0040) Alocar um contexto de seção. Disponível a partir de Windows 8.

[in] ContextSize

O tamanho, em bytes, da parte do contexto definida pelo driver de minifiltro. Deve ser maior que zero e menor ou igual a MAXUSHORT; para contextos de tamanho fixo, deve ser menor ou igual ao Tamanho especificado na estrutura FLT_CONTEXT_REGISTRATION . Um minifiltro usa essa parte do contexto para manter informações de contexto específicas para si mesma. O FltMgr trata essa parte da estrutura de contexto como opaca. Esse parâmetro é necessário e não pode ser zero.

[in] PoolType

O tipo de pool a ser alocado. Esse parâmetro é necessário e deve ser um dos seguintes. Consulte POOL_TYPE para obter uma descrição detalhada de cada tipo. Confira Comentários para obter mais informações.

Valor Significado
NonPagedPool Memória do sistema não pageable. PoolType deverá ser NonPagedPool se ContextType for FLT_VOLUME_CONTEXT.
PagedPool Memória do sistema paginável.
NonPagedPoolNx Pool sem execução (NX).

[out] ReturnedContext

Ponteiro para uma variável alocada pelo chamador que recebe o endereço do contexto recém-alocado. O chamador é responsável por chamar FltReleaseContext para liberar esse contexto quando ele não for mais necessário.

Retornar valor

FltAllocateContext retorna STATUS_SUCCESS ou um valor NTSTATUS apropriado, como um dos seguintes:

Código de retorno Descrição
STATUS_FLT_CONTEXT_ALLOCATION_NOT_FOUND As informações de alocação para o contexto do tipo especificado não foram fornecidas no momento do registro do filtro. OU, para contextos de tamanho fixo, o ContextSize solicitado é maior que o Tamanho especificado na estrutura FLT_CONTEXT_REGISTRATION para o ContextType especificado.
STATUS_FLT_DELETING_OBJECT O driver de minifiltro especificado no parâmetro Filter está sendo dividido. Este é um código de erro.
STATUS_INSUFFICIENT_RESOURCES FltAllocateContext encontrou uma falha de alocação de pool. Este é um código de erro.
STATUS_INVALID_BUFFER_SIZE ContextSize não pode ser maior que MAXUSHORT. Este é um código de erro.
STATUS_INVALID_PARAMETER Um valor inválido foi especificado para o ContextType ou o parâmetro ContextSize . Este é um código de erro.
STATUS_NOT_SUPPORTED O sistema de arquivos não dá suporte a contextos por fluxo. Este é um código de erro.

Comentários

Para obter mais informações sobre contextos, consulte Sobre contextos de minifiltro.

FltAllocateContext aloca um contexto do tipo especificado do pool especificado. Começando em Windows 11, se a memória para a qual ReturnedContext aponta é zero depende da seguinte maneira:

  • A memória tem a garantia de ser zero para contextos de tamanho variável.
  • O conteúdo da memória é definido pela implementação para contextos de tamanho fixo alocados por uma função de retorno de chamada fornecida pelo chamador.
  • Caso contrário, a memória não pode ser considerada zero para contextos de tamanho fixo devido ao comportamento da lista lookaside. Ou seja, uma entrada retornada da lista lookaside poderá não ser zerada se for a memória que foi liberada anteriormente para a lista lookaside em vez de uma nova alocação.

Antes de Windows 11, o conteúdo do contexto retornado não é zerado.

Definir PoolType como um valor inválido pode resultar em um comportamento inesperado, como fazer com que listas lookaside sejam ignoradas, resultando na perda dos benefícios de desempenho das listas lookaside. Para contextos que têm uma função de retorno de chamada ContextAllocateCallback , o comportamento devido a um PoolType inválido depende da implementação.

Depois que o contexto é alocado, ele pode ser definido em um objeto passando o ponteiro ReturnedContext para a rotina de contexto de conjunto apropriada da tabela a seguir.

Tipo de contexto Rotina de Set-Context
FLT_FILE_CONTEXT FltSetFileContext (começando com o Windows Vista)
FLT_INSTANCE_CONTEXT FltSetInstanceContext
FLT_SECTION_CONTEXT FltCreateSectionForDataScan (começando com Windows 8)
FLT_STREAM_CONTEXT FltSetStreamContext
FLT_STREAMHANDLE_CONTEXT FltSetStreamHandleContext
FLT_TRANSACTION_CONTEXT FltSetTransactionContext (começando com o Windows Vista)
FLT_VOLUME_CONTEXT FltSetVolumeContext

Quando um driver de minifiltro chama FltRegisterFilter de sua rotina DriverEntry , ele deve registrar cada tipo de contexto que ele usa. Para obter mais informações, consulte a entrada de referência para a estrutura FLT_CONTEXT_REGISTRATION e Registrando tipos de contexto.

FltAllocateContext não inicializa o conteúdo da parte da estrutura de contexto específica do driver de minifiltro.

Para obter o contexto de um objeto, chame FltGetContexts ou a rotina de contexto de obtenção apropriada da tabela a seguir.

Tipo de contexto Rotina de Get-Context
FLT_FILE_CONTEXT FltGetFileContext (começando com o Windows Vista)
FLT_INSTANCE_CONTEXT FltGetInstanceContext
FLT_SECTION_CONTEXT FltGetSectionContext (começando com Windows 8)
FLT_STREAM_CONTEXT FltGetStreamContext
FLT_STREAMHANDLE_CONTEXT FltGetStreamHandleContext
FLT_TRANSACTION_CONTEXT FltGetTransactionContext (começando com o Windows Vista )
FLT_VOLUME_CONTEXT FltGetVolumeContext

Os contextos são contados por referência e, em um retorno bem-sucedido de FltAllocateContext, o contexto apontado por ReturnedContext foi inicializado para ter uma contagem de referência de 1. Um contexto é liberado automaticamente quando sua contagem de referência atinge zero. Para incrementar a contagem de referência em um contexto, chame FltReferenceContext.

Para diminuir a contagem de referência em um contexto, chame FltReleaseContext.

Como os contextos são contados por referência, geralmente não é necessário excluí-los. Para excluir um contexto explicitamente, chame FltDeleteContext ou a rotina de contexto de exclusão apropriada da tabela a seguir.

Tipo de contexto Rotina de Delete-Context
FLT_FILE_CONTEXT FltDeleteFileContext (começando com o Windows Vista)
FLT_INSTANCE_CONTEXT FltDeleteInstanceContext
FLT_SECTION_CONTEXT FltCloseSectionForDataScan (começando com Windows 8)
FLT_STREAM_CONTEXT FltDeleteStreamContext
FLT_STREAMHANDLE_CONTEXT FltDeleteStreamHandleContext
FLT_TRANSACTION_CONTEXT FltDeleteTransactionContext (começando com o Windows Vista)
FLT_VOLUME_CONTEXT FltDeleteVolumeContext

Requisitos

Requisito Valor
Plataforma de Destino Universal
Cabeçalho fltkernel.h (inclua Fltkernel.h)
Biblioteca FltMgr.lib
DLL Fltmgr.sys
IRQL <= APC_LEVEL

Confira também

FLT_CONTEXT_REGISTRATION

FltCloseSectionForDataScan

FltCreateSectionForDataScan

FltDeleteContext

FltDeleteFileContext

FltDeleteInstanceContext

FltDeleteStreamContext

FltDeleteStreamHandleContext

FltDeleteTransactionContext

FltDeleteVolumeContext

FltGetContexts

FltGetFileContext

FltGetInstanceContext

FltGetSectionContext

FltGetStreamContext

FltGetStreamHandleContext

FltGetTransactionContext

FltGetVolumeContext

FltReferenceContext

FltRegisterFilter

FltReleaseContext

FltSetFileContext

FltSetInstanceContext

FltSetStreamContext

FltSetStreamHandleContext

FltSetTransactionContext

FltSetVolumeContext