Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Проверка использования
Средство проверки фильтра проверяет следующее использование в драйвере минифильтра:
- Правильное использование параметров и контекст вызова
- Правильные возвращаемые значения из подпрограмм обратного вызова предоперперации и после операции
- Согласованные и последовательные изменения параметров в данных обратного вызова
Отслеживание объектов Менеджера фильтров
Средство проверки фильтров отслеживает следующие объекты диспетчера фильтров:
- Фильтрация контекстов (контексты потока, контексты файлов и т. д.)
- Структуры данных обратного вызова
- Рабочие элементы в очереди
- Структуры NameInformation
- Объекты файлов
- Фильтрация объектов
- Экземпляры объектов
- Объекты томов
Для ссылочных структур, таких как контексты фильтров и структуры сведений о имени, средство проверки фильтров будет разбито на отладчик после выгрузки драйвера фильтра, если какие-либо счетчики ссылок, как представляется, были утечки. В нем будут напечатаны инструкции по использованию расширения отладчика !fltkd для поиска утекших структур.
Нарушения проверяющего фильтра
Когда средство проверки фильтра обнаруживает нарушение, оно выводит сообщение в отладчике, описывающее нарушение. Для большинства нарушений он также останавливает выполнение и предлагает пользователю выполнить некоторые действия. Рассмотрим пример.
FILTER VERIFIER ERROR: A filter returned an unknown pre-operation callback status.
(Filter = FFFFAC04A21CD8A0 (MyFilter), Status = 0xbaadf00d)
Break, ignore, zap or remove ?
Чтобы продолжить, введите одну из четырех однобуквенные команды:
-
B
илиb
для остановки. Это переключается на отладчик, где можно выполнить дальнейшее исследование. -
I
илиi
Игнорировать: выполнение будет возобновлено. Если это нарушение возникает снова, Filter Verifier выведет сообщение о нарушении в отладчик, остановит выполнение и отобразит подсказку. -
Z
илиz
для Zap: возобновляет выполнение. Если это нарушение возникает снова, средство проверки фильтров выводит сообщение о нарушении в отладчик, но не остановит выполнение. -
R
илиr
для удаления: возобновляет выполнение. Если это нарушение возникает снова, средство проверки фильтров не будет выводить сообщение о нарушении и не будет остановлено выполнение.
Примечание.
При использовании средства проверки фильтров на драйвере, который был создан с включенными оптимизацией компилятора, иногда возникает ошибка средства проверки фильтра, которая постоянно утверждает, что утечка ссылок фильтра на один или несколько ресурсов даже в том случае, если не удается найти причину утечки в коде. Сообщение начинается с текста, аналогичного следующему:
FILTER VERIFIER ERROR: A filter (Filter = FFFFAC04A21CD8A0 (MyFilter)) leaked references to the following resources:
Вы также можете увидеть сообщение, указывающее, что отслеживание объектов не синхронизировано, например:
FILTER VERIFIER WARNING: Filter manager verifier object tracking may be out of sync for the system
Наиболее распространенной причиной этого условия является то, что средство проверки фильтра не удалось определить истинный вызывающий api диспетчера фильтров из-за оптимизации хвостового вызова. Это может произойти, когда подпрограмма в драйвере вызывает API диспетчера фильтров в качестве последней строки. Рассмотрим пример.
void MyWorkItemCallback(PFLT_GENERIC_WORKITEM WorkItem,
PVOID Filter,
PVOID Context)
{
// Do some stuff
...
FltFreeGenericWorkItem(WorkItem);
}
Существует несколько способов убедиться, что это произошло:
- Отключите оптимизацию подозрительной подпрограммы, завернув ее в
#pragma optimize("", off) ... #pragma optimize("", on)
. - Переупорядочение кода таким образом, чтобы вызов API диспетчера фильтров не является последней вещью, которая происходит в вашей подпрограмме.
Если ошибка больше не воспроизводится после попытки одного из этих вариантов, скорее всего, это ложное срабатывание.
Активация этого параметра
Функцию проверки фильтра файловой системы можно активировать для одного или нескольких драйверов с помощью командной verifier.exe
строки. Дополнительные сведения см. в разделе "Выбор параметров средства проверки драйвера".
Примечание.
До сборки Windows 25126 не поддерживается включение проверки фильтра файловой системы на одном или нескольких минифильтрах одновременно с выбором ntoskrnl для проверки. Это может привести к ложным ошибкам проверки.
Чтобы избежать этой проблемы, не включайте ntoskrnl в список компонентов для проверки или обновления до версии Windows после сборки 25126.
Рекомендуемый способ запуска средства проверки фильтра — с параметром /standardverifier.exe
, так как он предоставляет дополнительные полезные функции, такие как специальный пул и отслеживание пула:
verifier.exe /standard /driver MyFilter.sys
Проверка начинается, когда драйвер минифильтра регистрируется в диспетчере фильтров.
Включение только средства проверки фильтров в Windows 11 и более поздних версиях Windows Чтобы включить минимальный набор проверок средства проверки фильтра, включите параметры проверки ввода-вывода и фильтра файловой системы в средстве проверки драйверов (verifier.exe). Рассмотрим пример.
verifier.exe /ruleclasses 5 37 /driver MyFilter.sys
Включение только средства проверки фильтров в Windows 10 и предыдущих версиях Windows Чтобы включить минимальный набор проверок средства проверки фильтра, укажите имя драйвера минифильтра и включите параметр проверки ввода-вывода в средстве проверки драйверов (verifier.exe). Рассмотрим пример.
verifier.exe /flags 0x10 /driver MyFilter.sys