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

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

Область применения: Windows Server 2012 Foundation, Windows Server 2012 Essentials, Windows Server 2012 Standard, Windows Server 2012 Datacenter
Исходный номер базы знаний: 244617

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Примечание.

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

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

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

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

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

Примечание.

В 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 имеет интерфейсы командной строки и графического пользовательского интерфейса ( GUI), поэтому вы можете указать драйверы и соответствующие уровни проверки. Вы также можете просмотреть статистику средства проверки драйверов в режиме реального времени. Дополнительные сведения см. в разделе Диспетчер проверки драйверов (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
    

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

  • Настройка с помощью режима volatile

    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, представляющее коллекцию всех включенных флагов.