estrutura PREFETCH_OPEN_ECP_CONTEXT (ntifs.h)

A estrutura PREFETCH_OPEN_ECP_CONTEXT comunica se o pré-busca executa uma determinada solicitação aberta em um arquivo.

Sintaxe

typedef struct _PREFETCH_OPEN_ECP_CONTEXT {
  PVOID Context;
} PREFETCH_OPEN_ECP_CONTEXT, *PPREFETCH_OPEN_ECP_CONTEXT;

Membros

Context

Um ponteiro para um contexto opaco associado à solicitação aberta.

Comentários

O pré-busca é um componente do sistema operacional que está totalmente integrado ao gerenciador de cache e ao gerenciador de memória para tornar os acessos ao disco mais eficientes e, portanto, melhorar o desempenho. Se outros componentes interferirem no pré-busca, o desempenho do sistema diminuirá e poderá haver deadlock. Portanto, o pré-busca anexa a estrutura PREFETCH_OPEN_ECP_CONTEXT a um arquivo para comunicar que o pré-busca executou uma solicitação aberta nesse arquivo. O pré-busca usa o GUID GUID_ECP_PREFETCH_OPEN em uma chamada para a rotina FltCreateFileEx2 ou IoCreateFileEx para anexar a estrutura PREFETCH_OPEN_ECP_CONTEXT . Um driver de filtro do sistema de arquivos (filtro) pode chamar FltFindExtraCreateParameter para determinar se PREFETCH_OPEN_ECP_CONTEXT está anexado ao arquivo e, em seguida, tomar as medidas apropriadas. O filtro deve chamar a rotina FltIsEcpFromUserMode para determinar se a estrutura de contexto PREFETCH_OPEN_ECP_CONTEXT originou-se do modo kernel. Para impedir que aplicativos mal-intencionados falsifiquem o pré-busca, o filtro não deverá aceitar PREFETCH_OPEN_ECP_CONTEXT se ele se originou do modo de usuário.

Depois que o pré-busca anexar a estrutura PREFETCH_OPEN_ECP_CONTEXT a um arquivo, toda a atividade de pré-busca adicional para o arquivo envolverá o objeto de arquivo que PREFETCH_OPEN_ECP_CONTEXT anexado. Se um filtro precisar identificar solicitações de sistema de arquivos de pré-busca que não sejam solicitações de criação, o filtro deverá manter seu próprio estado (por exemplo, contextos de identificador do gerenciador de filtros). O filtro mantém seu próprio estado para determinar se um objeto de arquivo específico é um objeto de arquivo pré-busca.

O gerenciador de memória pode armazenar em cache o objeto de arquivo pré-busca. O gerenciador de memória pode usar o objeto de arquivo de pré-busca para outros aplicativos que executam E/S mapeada ou E/S armazenada em cache usando o gerenciador de cache. Portanto, o objeto de arquivo de pré-busca pode ser usado para paginação de E/S antes ou depois que o pré-busca fecha seu identificador. Essa E/S de paginação pode incluir gravações de paginação, mesmo que o pré-busca nunca grave nenhum dado. As gravações de paginação são geradas por outros aplicativos. O gerenciador de memória grava dados dos aplicativos usando seu objeto de arquivo pré-busca armazenado em cache. Portanto, o filtro executa o trabalho que é disparado por gravações de paginação, o filtro ainda deve executar esse trabalho, mesmo que as gravações de paginação venham em um objeto de arquivo de pré-busca.

Quando um filtro determina que uma operação de limpeza ocorreu em um objeto de arquivo de pré-busca, o filtro não deve mais considerar que o objeto de arquivo seja aberto previamente.

Veja a seguir operações comuns que o pré-busca executa (no entanto, nessas operações, o pré-busca nunca altera o conteúdo do arquivo):

  • Abrir e fechar volume
  • Abrir e fechar arquivo
  • Informações do arquivo de consulta
  • Definir informações de arquivo (apenas para instruir o sistema de arquivos a não atualizar a hora do último acesso para essa abertura)
  • Criar imagem e seção de dados
  • Executar E/S de paginação assíncrona

Para evitar a indução de uma possível situação de deadlock, um filtro deve:

  • Nunca bloqueie nenhuma operação de pré-busca.
  • Passe operações de pré-busca sem emitir outras solicitações do sistema de arquivos.

Para que qualquer aplicativo ou driver acesse qualquer um dos dados que estão sendo pré-buscados, ele deve abrir seu próprio identificador para o arquivo ou criar uma seção ou ambos.

Para obter informações sobre como usar ECPs para associar informações adicionais a uma operação de IRP_MJ_CREATE em um arquivo, consulte Usando parâmetros de criação extra com uma operação de IRP_MJ_CREATE.

A estrutura PREFETCH_OPEN_ECP_CONTEXT é somente leitura. Você deve usá-lo para recuperar informações sobre um ECP aberto de pré-busca. Para obter mais informações sobre esse problema, consulte ECPs definidos pelo sistema.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista
Cabeçalho ntifs.h (inclua Ntifs.h)

Confira também

FltCreateFileEx2

FltIsEcpFromUserMode

IoCreateFileEx