Прочитать на английском

Поделиться через


Использование средства проверки драйверов для выявления проблем с драйверами Windows для расширенных пользователей

Средство проверки драйверов входит в каждую версию Windows с Windows 2000. Он используется для обнаружения и устранения многих проблем с драйверами, которые, как известно, вызывают повреждение системы, сбои или другое непредсказуемое поведение. В этой статье описывается, как использовать средство проверки драйверов для изоляции и устранения неполадок драйвера в системе.

Область применения: Windows Server 2016, Windows Server 2019, Windows Server 2022, Windows Server 2025
Исходный номер базы знаний: 244617

Возможности средства проверки драйверов

Чтобы использовать средство проверки драйверов, запустите Verifier.exe и перезагрузите компьютер. Вам не нужно вносить другие изменения, чтобы начать анализ драйверов в системе. Учетная запись пользователя требует прав администратора для запуска Verifier.exe.

Средство проверки драйверов может проверить множество различных аспектов поведения драйвера. Эти возможности группируются в параметры или параметры, которые включены с помощью флагов. (Параметры, параметры и флаги, как правило, взаимозаменяемы в документации средства проверки драйверов. Они представляют аналогичные понятия.)

Подробные сведения о каждом флаге см. в разделе "Параметры средства проверки драйверов" и классы правил.

Стандартные параметры

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

Автоматические проверки

Эти проверки всегда выполняются на проверяемом драйвере независимо от того, какие параметры были выбраны.

Примеры автоматических проверок:

  • Проверки IRQL
    • Поднятый IRQL (то есть текущий IRQL меньше целевого IRQL).
    • Пониженный IRQL (то есть текущий IRQL больше целевого IRQL).
  • SpinLocks:
    • Двойной выпуск блокировки спина.
    • Приобретение и выпуски спин-блокировки выполняются по соответствующему IRQL.
  • Выделение памяти:
    • Выделения и бесплатные страницы пула выполняются по правильной irQL (APC_LEVEL или ниже).
    • Выделение нестраничного пула и бесплатные ресурсы выполняются по правильному IRQL (DISPATCH_LEVEL или ниже).
    • Для этих интерфейсов программирования приложений не указываются случайные (неинициализированные) значения.
    • Освобожденные выделения не указывают на активные объекты таймера.
  • Проверка выгрузки драйвера:
    • Проверяет, что драйвер не имеет ожидающих операций во время выгрузки, например ожидающих DPCs или рабочих потоков.
  • Другое поведение драйвера:
    • Неправильное переключение стека потоков.
    • Попытка вызвать KeWaitXxx в IRQL >= DISPATCH_LEVEL.
    • Разыменовывание объекта, который уже имеет число ссылок 0.

Специальный пул

Если этот параметр активен, средство проверки драйверов выделяет большинство запросов памяти драйвера из специального пула. Этот специальный пул отслеживается для переполнения памяти, недостаточного выполнения памяти и памяти, доступ к которым осуществляется после освобождения.

Принудительное проверка IRQL

Если этот параметр активен, средство проверки драйверов оказывает крайнее давление на память драйвера, недействив код страницы. Если драйвер пытается получить доступ к страничной памяти в неправильном IRQL или при удержании блокировки спина, средство проверки драйверов обнаруживает это поведение.

Отслеживание пула

Если этот параметр активен, средство проверки драйверов проверяет, освобождает ли драйвер все выделения памяти при выгрузке. Он показывает утечки памяти.

Проверка ввода-вывода

Если этот параметр активен, средство проверки драйверов выделяет irps драйвера из специального пула и отслеживает обработку ввода-вывода драйвера. Он обнаруживает незаконное или несогласованное использование подпрограмм ввода-вывода.

Если включен средство проверки ввода-вывода:

  • Все поставщики услуг IR, выделенные через IoAllocateIrp, выделяются из специального пула, если они доступны.
  • Проверки выполняются в IoCallDriver, IoCompleteRequest и IoFreeIrp для перехвата сообщений об ошибках драйвера.
  • Все ошибки проверки ввода-вывода проверяются с помощью DRIVER_VERIFIER_IOMANAGER_VIOLATION кода (0xC9).

Примечание

В windows 7 и более поздних версиях операционной системы Windows все функции расширенной проверки ввода-вывода включены в состав проверки ввода-вывода, и они больше не доступны и не нужны для выбора параметра расширенной проверки ввода-вывода в диспетчере проверки драйверов или в командной строке.

Обнаружение взаимоблокировки

Если этот параметр активен, средство проверки драйверов отслеживает использование драйверов блокировки спина, мьютексов и быстрых мьютексов. Он обнаруживает, может ли код драйвера вызвать взаимоблокировку в какой-то момент.

Расширенная проверка ввода-вывода

Если этот параметр активен, средство проверки драйверов отслеживает вызовы нескольких подпрограмм диспетчера ввода-вывода и выполняет стресс-тестирование PnP IRPs, power IRPs и WMI IRP.

Примечание

В Windows 7 и более поздних версиях все функции расширенной проверки ввода-вывода включены в состав проверки ввода-вывода. Этот параметр больше недоступен или не требуется в диспетчере проверки драйверов или из командной строки.

Проверка DMA

Если этот параметр активен, средство проверки драйверов отслеживает использование драйверов подпрограмм DMA. Он обнаруживает неправильное использование буферов DMA, адаптеров и регистров карт.

Проверки безопасности

Если этот параметр активен, средство проверки драйверов ищет распространенные ошибки, которые могут привести к уязвимостям безопасности, например ссылку на адреса в пользовательском режиме по подпрограммам в режиме ядра.

Другие проверки

Если этот параметр активен, средство проверки драйверов ищет распространенные причины сбоя драйвера, например неправильное использование освобожденной памяти.

Проверка соответствия DDI

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

Параметр проверки соответствия DDI реализуется с помощью библиотеки режима ядра, называемой VerifierExt.sys. Если обнаружено нарушение одного из правил проверки соответствия требованиям DDI, VerifierExt.sys будет модулем, вызывающим проверку системной ошибки.

Дополнительные параметры

Эти параметры предназначены для конкретного тестирования сценария или являются вариантами, которые будут внедрять сбои или задержки в определенные подпрограммы DDI для имитации экстремальных стрессовых условий.

Требования к проверяющего драйвера

Единственное требование заключается в том, что необходимо установить Windows Server 2012. Вы можете включить средство проверки драйверов как в розничных, так и проверенных версиях Windows. Если антивирусная программа Norton установлена, не включите обнаружение взаимоблокировки средства проверки драйверов.

Включение средства проверки драйверов

Средство проверки драйверов можно включить с помощью Verifier.exe. Verifier.exe включается в каждую копию Windows. Он автоматически устанавливается в папку System32. Verifier.exe имеет интерфейсы командной строки и графического пользовательского интерфейса, поэтому можно указать драйверы и соответствующие уровни проверки. Вы также можете просмотреть статистику средства проверки драйверов в режиме реального времени. Дополнительные сведения см. в разделе диспетчера проверки драйверов (Verifier.exe).

Нарушения средства проверки драйвера отладки

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

Все нарушения проверки драйверов приводят к проверке ошибок, наиболее распространенные (хотя и не обязательно все) являются:

  • 0xC1: SPECIAL_POOL_DETECTED_MEMORY_CORRUPTION
  • 0xC4: DRIVER_VERIFIER_DETECTED_VIOLATION
  • 0xC6: DRIVER_CAUGHT_MODIFYING_FREED_POOL
  • 0xC9: DRIVER_VERIFIER_IOMANAGER_VIOLATION
  • 0xD6: DRIVER_PAGE_FAULT_BEYOND_END_OF_ALLOCATION
  • 0xE6: DRIVER_VERIFIER_DMA_VIOLATION

!analyze -v — это лучшая команда, используемая при запуске нового сеанса отладки. Эта команда вернет полезные сведения и попытается определить драйвер сбоя.

Расширения отладчика, относящиеся к проверяющим драйверам:

  • !verifier будет дампа статистики проверяющего драйвера. !verifier -? отобразит все доступные параметры.
  • !deadlock дампы информации, связанные с блокировками или объектами, отслеживаемыми обнаружением Взаимоблокировки. !deadlock -? отобразит все доступные параметры.
  • !iovirp [address] дамп сведений, связанных с IRP, отслеживаемой проверяющей операцией ввода-вывода.
  • !ruleinfo [RuleID] дампа данных, связанных с правилом проверки соответствия DDI, которое было нарушено (RuleID всегда является первым аргументом проверки ошибок, все идентификаторы правил проверки соответствия DDI находятся в форме 0x200nn).

Средства проверки драйверов и графические драйверы

Графические драйверы в режиме ядра Windows, такие как принтер и библиотеки DLL драйвера отображения, ограничены вызовом точки входа пула напрямую. Выделение пула выполняется косвенно с помощью обратных вызовов интерфейса драйвера графического устройства (DDI) в Win32k.sys. Например, EngAllocMem — это обратный вызов, вызывающий графический драйвер для явного выделения памяти пула. Другие специализированные обратные вызовы, такие как EngCreatePalette и EngCreateBitmap, также возвращают память пула.

Чтобы обеспечить то же автоматическое тестирование для графических драйверов, в Win32k.sys включена поддержка некоторых функций средства проверки драйверов. Так как графические драйверы являются более ограниченными, чем другие драйверы в режиме ядра, они требуют только подмножества функций средства проверки драйверов. В частности, проверка IRQL и проверка ввода-вывода не требуются. Другие функции, а именно использование специального пула, случайный сбой выделения пула и отслеживание пула, поддерживаются в различных уровнях обратного вызова DDI графики.

Случайные сбои поддерживаются для следующих функций обратного вызова DDI:

  • EngAllocMem
  • EngAllocUserMem
  • EngCreateBitmap
  • EngCreateDeviceSurface
  • EngCreateDeviceBitmap
  • EngCreatePalette
  • EngCreateClip
  • EngCreatePath
  • EngCreateWnd
  • EngCreateDriverObj
  • BRUSHOBJ_pvAllocRbrush
  • CLIPOBJ_ppoGetPath

Кроме того, для EngAllocMem поддерживается использование специального пула и отслеживания пула.

Включение средства проверки драйверов для графических драйверов идентично другим драйверам. Дополнительные сведения см. в разделе "Включить средство проверки драйверов". Неподдерживаемые флаги, такие как проверка IRQL, игнорируются. Кроме того, можно использовать !gdikdx.verifier команду отладчика ядра для проверки текущего состояния средства проверки драйвера и трассировки пула для графических драйверов.

Примечание

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

Диспетчер проверки драйверов (Verifier.exe)

Средство диспетчера проверки драйверов (Verifier.exe) — это предпочтительный способ создания и изменения параметров средства проверки драйверов и сбора статистики из средства проверки драйверов. Verifier.exe находится в папке %WinDir%\System32 для каждой установки Windows.

Диспетчер проверки драйверов — это графический интерфейс, включенный в Состав Windows для настройки средства проверки драйверов. Запустите диспетчер проверки драйверов с помощью verifier.exe без других параметров командной строки. При включении коммутаторов используется версия служебной программы на основе командной строки.

Для получения справки по настройке средства проверки драйверов запуститесь verifier.exe /? из окна CMD администратора.

Состояние драйвера

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

  • Загружено: драйвер в настоящее время загружается и проверяется.
  • Выгружается: драйвер в настоящее время не загружается, но он был загружен по крайней мере один раз после перезагрузки компьютера.
  • Никогда не загружается: драйвер никогда не загружался. Это состояние может указать, что файл образа драйвера поврежден или указан имя драйвера, отсутствующее в системе.

Выберите заголовок списка, чтобы отсортировать список по именам драйверов или состоянию. В правой верхней области диалогового окна можно просмотреть текущие типы проверки, действующие. Состояние драйверов обновляется автоматически, если вы не перейдете в режим обновления вручную. Вы можете изменить частоту обновления с помощью переключателей в левой нижней области диалогового окна. Чтобы принудительно обновить состояние, нажмите кнопку "Обновить сейчас".

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

Глобальные счетчики

На этой странице свойств показано текущее значение некоторых счетчиков, поддерживаемых средством проверки драйверов. Нулевое значение счетчика может указывать на то, что соответствующий флаг средства проверки драйвера не включен. Например, значение 0 для счетчика Other/Faults указывает, что флаг моделирования низких ресурсов не включен. Вы можете отслеживать действие проверяющего средства, так как значения счетчиков обновляются автоматически по умолчанию. Вы можете изменить частоту обновления, переключиться на обновление вручную или принудительно обновить с помощью группы элементов управления в левой нижней области диалогового окна.

Отслеживание пула

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

Параметры

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

  • Проверка включена: драйвер в настоящее время проверяется.
  • Убедитесь, что драйвер отключен. В настоящее время драйвер не проверен.
  • Проверка включена (перезагрузка необходима): драйвер проверяется только после следующего перезапуска.
  • Проверка отключена (перезагрузка необходима): драйвер в настоящее время проверяется, но не проверяется после следующего перезапуска.

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

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

Если в верхней части списка установлено значение "Проверить все драйверы", список и кнопки "Проверить" и "Не проверять" и элемент управления редактирования недоступны. Это означает, что после следующего перезапуска проверяются все драйверы в системе.

Тип проверки можно задать с помощью флажков в правой верхней части диалогового окна. Вы можете включить проверку ввода-вывода на уровне 1 или на уровне 2. Проверка уровня 2 сильнее уровня 1.

Сохраните любые изменения в параметрах, нажав кнопку "Применить". На этой странице есть еще две кнопки:

  • Предпочтительный параметр: он выбирает некоторые часто используемые параметры (при проверке всех драйверов).
  • Сброс всех: очищает все параметры средства проверки драйверов, чтобы не проверялись драйверы.

После нажатия кнопки "Применить" необходимо перезагрузить компьютер, чтобы изменения вступили в силу.

Переменные параметры

Эту страницу свойств можно использовать для немедленного изменения флагов средства проверки драйверов. Вы можете переключать состояние некоторых флагов средства проверки драйверов. И вы не можете изменить список проверяемых драйверов. После изменения состояния некоторых флажков нажмите кнопку "Применить ", чтобы изменения вступили в силу. Изменения вступают в силу немедленно. Они будут длиться до тех пор, пока не будете вносить дополнительные изменения или пока не перезагрузите компьютер.

Интерфейс командной строки

Вы также можете запустить Verifier.exe из командной строки (для получения дополнительной информации введите verifier.exe /? в командной строке). Несколько коммутаторов можно использовать в командной строке, например:

Verifier.exe /flags 0x209BB /driver MyDriver1.sys MyFilterDriver1.sys

В следующем списке показаны наиболее часто используемые флаги командной строки:

Настройка параметров (флагов)

  • значение verifier.exe /flags

    Значение — это шестнадцатеричное число ( требуется префикс 0x ), представляющее коллективное значение флагов для включения. Значение для каждого флага отображается в выходных verifier /? данных.

    Стандартные флаги:

    0x00000000: автоматические проверки
    0x00000001: специальный пул
    0x00000002: принудительной проверки IRQL
    0x00000008: отслеживание пула
    0x00000010: проверка ввода-вывода
    0x00000020: обнаружение взаимоблокировок
    0x00000080: проверка DMA
    0x00000100: проверки безопасности
    0x00000800: другие проверки
    0x00020000: проверка соответствия DDI

    Дополнительные флаги:

    0x00000004: случайное моделирование низких ресурсов
    0x00000040: расширенная проверка ввода-вывода (только в Vista)
    0x00000200. Принудительное ожидание запросов ввода-вывода
    0x00000400: ведение журнала IRP
    0x00002000. Инвариантная проверка MDL для стека
    0x00004000: инвариантная проверка MDL для драйвера0x00008000: задержка задержки Power Framework

    Например, чтобы включить только специальный пул, проверку ввода-вывода и другие проверки:

    verifier.exe /flags 0x811
    

    Чтобы включить все стандартные параметры (в любом примере работает):

    verifier.exe /standard
    
    verifier.exe /flags 0x209BB
    
  • Настройка драйверов для проверки

    verifier.exe /driver driver1.sys [driver2.sys driver3.sys ...]
    

    Эта команда указывает конкретный драйвер или драйверы для проверки. Укажите дополнительные драйверы в разделенном пробелом списке.

    verifier.exe /all
    

    Эта команда проверяет все драйверы в системе.

  • Настройка с помощью режима "Переменная"

    verifier.exe /volatile /flags *value /adddriver MyDriver1.sys*
    

    Эта команда немедленно изменяет флаги проверяющего средства и добавляет MyDriver1.sys для проверки.

  • Запрос текущей статистики проверяющего средства

    verifier /query
    

    Дампа текущего состояния средства проверки драйверов и счетчиков в стандартные выходные данные.

  • Запрос текущих параметров проверяющего объекта

    verifier /querysettings
    

    Дампа текущих параметров средства проверки драйверов в стандартные выходные данные.

  • Очистка параметров средства проверки

    verifier.exe /reset
    

    Эта команда удаляет все текущие параметры средства проверки драйверов.

Дополнительные сведения для разработчиков драйверов

В разделах, приведенных ниже, описаны дополнительные сведения о параметрах средства проверки драйверов, которые могут быть интересны разработчикам драйверов. Эти параметры обычно не требуются ИТ-специалистам.

Важно!

В этот раздел, описание метода или задачи включены действия, содержащие указания по изменению параметров реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому убедитесь, что вы внимательно выполните следующие действия. Для дополнительной защиты создайте резервную копию реестра перед его изменением. Так вы сможете восстановить реестр, если возникнет проблема. Для получения дополнительной информации о том, как создать резервную копию и восстановить реестр, см. статью Сведения о резервном копировании и восстановлении реестра Windows.

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

  1. Запустите редактор реестра (Regedt32).

  2. Найдите следующий параметр реестра:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDrivers

  3. Измените REG_SZ ключ.

REG_SZ Задайте ключ для нечувствительных имен драйверов, которые требуется протестировать. Можно указать несколько драйверов, но использовать только один драйвер. Таким образом, вы можете убедиться, что доступные системные ресурсы не исчерпаны преждевременно. Преждевременное исчерпание ресурсов не приводит к проблемам надежности системы, но может привести к обходу некоторых проверок драйверов.

В следующем списке показаны примеры значений REG_SZ для ключа:

  • Ntfs.sys
  • Win32k.sys ftdisk.sys
  • *.sys

Уровень проверки драйвера можно указать в следующем разделе реестра:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\VerifyDriverLevel

Значение ключа — это DWORD, представляющий коллекцию всех флагов, включенных.