FSCTL_SET_PURGE_FAILURE_MODE IOCTL (ntifs.h)
O Gerenciador de Filtros usa o código de controle FSCTL_SET_PURGE_FAILURE_MODE para sincronizar operações durante o tempo de vida de uma seção criada para verificação de dados. Os filtros nunca devem emitir esse código de controle.
Código principal
Buffer de entrada
Uma estrutura SET_PURGE_FAILURE_MODE_INPUT .
Comprimento do buffer de entrada
Tamanho em bytes de SET_PURGE_FAILURE_MODE_INPUT.
Buffer de saída
Nenhum
Comprimento do buffer de saída
n/d
Buffer de entrada/saída
Nenhum
Comprimento do buffer de entrada/saída
n/d
Bloco de status
Reservado para uso do sistema.
Comentários
O Gerenciador de Filtros usa esse código de controle com IRP_MJ_FILE_SYSTEM_CONTROL chamadas para dar suporte à vida útil da seção. Essas chamadas servem para instruir um sistema de arquivos (e, raramente, minifiltros) a se comportar da maneira a seguir se não conseguir limpar os caches do Gerenciador de Cache.
Para cada FSCTL_SET_PURGE_FAILURE_MODE emitido com SET_PURGE_FAILURE_MODE_ENABLED definido, um FSCTL_SET_PURGE_FAILURE_MODE será emitido com o conjunto de SET_PURGE_FAILURE_MODE_DISABLED. Embora haja uma SET_PURGE_FAILURE_MODE_ENABLED pendente, o Gerenciador de Filtros responde da seguinte maneira a determinados status de falha para determinados tipos de operações (veja a tabela abaixo):
• Aguarda a operação, agilizando o fechamento da seção (sempre que possível) • Redireciona a operação para o minifiltro ou sistema de arquivos que emitiu a falha
Para disparar o Gerenciador de Filtros para responder adequadamente, o sistema de arquivos (ou filtro) responde a uma falha ao limpar uma seção das seguintes maneiras:
Operação | Status de retorno necessárias |
---|---|
IRP_MJ_CREATE (operações destrutivas) | STATUS_USER_MAPPED_FILE |
IRP_MJ_WRITE (somente operações sem buffer) | STATUS_PURGE_FAILED |
IRP_MJ_SET_INFORMATION | STATUS_PURGE_FAILED |
Esses status só devem ser retornados enquanto houver um SET_PURGE_FAILURE_MODE_ENABLED pendente (nenhum balanceamento SET_PURGE_FAILURE_MODE_DISABLED recebido). Em todos os outros casos, os status de erro serão retornados ao aplicativo.
Para qualquer outra operação (por exemplo, uma gravação armazenada em cache), se o sistema de arquivos (ou filtro) não conseguir limpar uma seção enquanto houver uma FSCTL_SET_PURGE_FAILURE_MODE pendente, ela será responsável por aguardar a operação e reutilizá-la quando a contagem de FSCTL_SET_PURGE_FAILURE_MODE pendente cair para zero. Se o sistema de arquivos (ou filtro) retornar apenas uma falha status (incluindo as listadas acima), esse status será retornado ao aplicativo.
O erro status é processado inteiramente no Gerenciador de Filtros, assim como o requeumento da operação com falha. Isso significa que nenhum deles é visível para filtros, o que tem as seguintes implicações importantes:
- Ferramentas de monitoramento do sistema de arquivos, como o Monitor de Processo , não relatarão essas operações.
- Se for necessário envolver um filtro superior para que a operação reemitida seja bem-sucedida, a operação requeucionada falhará. Nessa situação, os gravadores de filtro são necessários para garantir que esse segundo filtro retorne o status de falha.
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows 8 |
Cabeçalho | ntifs.h |