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) |