FSCTL_SET_PURGE_FAILURE_MODE IOCTL (ntifs.h)

Диспетчер фильтров использует код управления FSCTL_SET_PURGE_FAILURE_MODE для синхронизации операций в течение времени существования раздела, созданного для сканирования данных. Фильтры никогда не должны выдавать этот код элемента управления.

Основной код

IRP_MJ_DEVICE_CONTROL

Входной буфер

Структура SET_PURGE_FAILURE_MODE_INPUT .

Длина входного буфера

Размер SET_PURGE_FAILURE_MODE_INPUT в байтах.

Выходной буфер

None

Длина выходного буфера

Недоступно

Буфер входных и выходных данных

None

Длина входного/выходного буфера

Недоступно

Блок состояния

Зарезервировано для системного использования.

Комментарии

Диспетчер фильтров использует этот код элемента управления с IRP_MJ_FILE_SYSTEM_CONTROL вызовами, чтобы заключить в скобки срок действия раздела. Эти вызовы служат для указания файловой системе (и, в редких случаях, минифильтрам) вести себя следующим образом, если не удается очистить кэши диспетчера кэша.

Для каждого FSCTL_SET_PURGE_FAILURE_MODE, выданного с набором SET_PURGE_FAILURE_MODE_ENABLED, будет выдан FSCTL_SET_PURGE_FAILURE_MODE с набором SET_PURGE_FAILURE_MODE_DISABLED. Хотя существует еще SET_PURGE_FAILURE_MODE_ENABLED, диспетчер фильтров реагирует следующим образом на определенные состояния сбоев для определенных типов операций (см. таблицу ниже):

• Выполняет операцию, удаляя закрытие раздела (если это возможно) • Повторно отправляет операцию в минифильтр или файловую систему, которая вызвала сбой.

Чтобы запустить соответствующий ответ диспетчера фильтров, файловая система (или фильтр) реагирует на сбой очистки раздела следующими способами:

Операция Требуемое состояние возврата
IRP_MJ_CREATE (разрушительные операции) STATUS_USER_MAPPED_FILE
IRP_MJ_WRITE (только небуферизованные операции) STATUS_PURGE_FAILED
IRP_MJ_SET_INFORMATION STATUS_PURGE_FAILED

Эти состояния должны возвращаться только при наличии незаполненных SET_PURGE_FAILURE_MODE_ENABLED (балансировка SET_PURGE_FAILURE_MODE_DISABLED не получена). Во всех остальных случаях в приложение будут возвращены состояния ошибок.

Для любой другой операции (например, кэшируемой записи) если файловой системе (или фильтру) не удается очистить раздел, пока имеется FSCTL_SET_PURGE_FAILURE_MODE невыполненным, она отвечает за ожидание операции и ее повторную отправку, когда число невыполненных FSCTL_SET_PURGE_FAILURE_MODE падает до нуля. Если файловая система (или фильтр) просто возвращает состояние сбоя (включая перечисленные выше), это состояние будет возвращено приложению.

Состояние ошибки обрабатывается полностью в диспетчере фильтров, как и при повторном выполнении неудачной операции. Это означает, что ни те, ни из них не видны фильтрам, что имеет следующие важные последствия:

  • Средства мониторинга файловой системы, такие как монитор процессов , не сообщают об этих операциях.
  • Если для успешной повторной операции требуется использовать верхний фильтр, операция повторного постановки в очередь завершится ошибкой. В этой ситуации требуются средства записи фильтров, чтобы убедиться, что этот второй фильтр возвращает состояние сбоя.

Требования

Требование Значение
Минимальная версия клиента Windows 8
Верхняя часть ntifs.h

См. также раздел

SET_PURGE_FAILURE_MODE_INPUT