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

IRP_MJ_DEVICE_CONTROL

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

Confira também

SET_PURGE_FAILURE_MODE_INPUT