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


Использование средства проверки KMDF

Платформа предоставляет встроенные функции проверки, которые можно использовать для тестирования работающего драйвера KMDF. Эта функция, называемая kmDF Validateer, широко проверяет состояние драйвера и аргументы, которые драйвер передает в методы объекта платформы. Вы можете использовать средство проверки платформы самостоятельно или вместе с средством проверки драйвера общего назначения (Verifier.exe).

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

Если средство проверки KMDF включено, платформа прерывается в отладчик, если срок ожидания по умолчанию составляет 60 секунд до завершения некоторых описанных ранее событий. На этом этапе можно выполнить отладку проблемы или ввести "g" в отладчике, чтобы перезапустить период ожидания. Вы можете изменить период времени ожидания по умолчанию с помощью значения реестра DbgWaitForSignalTimeoutInSec , описанного в разделе "Управление поведением проверяющего средства".

Мы рекомендуем запустить средство проверки драйверов (Verifier.exe) во время тестирования и добавить собственный драйвер и wdf01000.sys в список проверки.

Примечание.

Средство проверки KMDF автоматически включается при использовании параметров средства проверки /standard драйверов. Если вы используете /flags вместо /standard параметра средства проверки драйверов, обратите внимание, что в Windows 10 версии 1803 или более последних сборок рекомендуется /flags использовать /ruleclasses. Класс правил для WDF равен 34. Чтобы включить средство проверки WDF, если /standard не используется, используйте /ruleclasses 34.

Вы также можете использовать приложение элемента управления проверкой WDF (WdfVerifier.exe), чтобы включить и отключить средство проверки KMDF.

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

Вы можете вручную включить средство проверки KMDF с помощью следующей процедуры:

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

  2. Используйте RegEdit, чтобы задать значение VerifierOn ненулевому значению в подразделе "Параметры драйвера\Wdf" раздела HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services в реестре Windows. Значение, отличное от нуля, указывает, что включен средство проверки KMDF.

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

  3. Используйте диспетчер устройств для повторной регистрации устройства, тем самым загрузив драйвер.

  4. Когда драйвер вызывает WdfDriverCreate, платформа проверяет реестр и включает проверяющий объект платформы, если VerifierOn имеет ненулевое значение.

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

Чтобы определить, включен ли средство проверки платформы, установите точку останова в расположении после вызова WdfDriverCreate драйвера и используйте команду расширения отладчика !wdfdriverinfo:

!wdfkd.wdfdriverinfo 0x1> **** <

Дополнительные сведения о командах расширения отладчика см. в разделе "Расширения отладчика" для драйверов на основе платформы.

Управление поведением проверяющего

Мы рекомендуем использовать приложение элемента управления WDF Verifier для управления параметрами ниже. Однако можно напрямую изменить следующие значения в реестре.

Соответствующие значения находятся в подразделе Parameters\Wdf ключа HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services .

VerifyOn (REG_DWORD)
Задайте для этого значения значение, отличное от нуля, чтобы включить макрос WDFVERIFY.

DbgBreakOnError (REG_DWORD)
Если для этого значения задано ненулевое значение, платформа будет разбита на отладчик (если доступно) каждый раз, когда драйвер вызывает WdfVerifierDbgBreakPoint.

DbgWaitForSignalTimeoutInSec (REG_DWORD)
Начиная с Windows 8, если для проверкиon и DbgBreakOnError заданы ненулевое значение, драйвер может изменить период ожидания по умолчанию, задав DbgWaitForSignalTimeoutInSec.

VerifierAllocateFailCount (REG_DWORD)
Если для этого значения задано значение n, платформа завершается ошибкой каждой попытки выделить память для объектов драйвера после выделения nth .

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

EnhancedVerifierOptions (REG_DWORD)
Только KMDF

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

VerifyDownLevel (REG_DWORD)
Если задано значение, отличное от нуля, и если драйвер был создан с версией платформы, старше текущей версии, средство проверки платформы включает тесты, добавленные после сборки драйвера.

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

Полные описания этих значений реестра см. в разделе "Значения реестра" для драйверов на основе платформы отладки.