PREFETCH_OPEN_ECP_CONTEXT estrutura (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.
Observações
O prefetcher é um componente do sistema operacional que é fortemente integrado ao gerenciador de cache e ao gerenciador de memória para tornar os acessos em disco mais eficientes e, portanto, melhorar o desempenho. Se outros componentes interferirem no pré-busca, o desempenho do sistema diminuirá e poderá ficar em deadlock. Portanto, o prefetcher anexa a estrutura PREFETCH_OPEN_ECP_CONTEXT a um arquivo para comunicar que o pré-buscante executou uma solicitação aberta nesse arquivo. O prefetcher usa o GUID
Depois que o prefetcher anexa a estrutura PREFETCH_OPEN_ECP_CONTEXT a um arquivo, toda a atividade de pré-busca adicional para o arquivo envolve 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 prefetcher.
O gerenciador de memória pode armazenar em cache o objeto de arquivo prefetcher. 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 prefetcher pode ser usado para paginar E/S antes ou depois que o pré-buscado fechar 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 de 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 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 executadas pelo pré-busca (no entanto, nessas operações, o pré-busca nunca altera o conteúdo do arquivo):
- Volume aberto e fechado
- 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 induzir uma possível situação de deadlock, um filtro deve:
- Nunca bloqueie nenhuma operação de pré-busca.
- Passe as 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 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 System-Defined ECPs.
Requisitos
Requisito | Valor |
---|---|
de cliente com suporte mínimo | Windows Vista |
cabeçalho | ntifs.h (inclua Ntifs.h) |
Consulte também
IoCreateFileEx