Значения реестра для отладки драйверов WDF
В этой статье описываются значения реестра, которые может задать драйвер WDF. Он применяется к драйверам KMDF и драйверам UMDF, начиная с UMDF версии 2.
Если в разделах ниже не указано иное, следующие значения реестра находятся в подразделе Parameters\Wdf
драйвера.
- Для драйвера KMDF этот подраздел находится в
HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services
, под именем службы драйвера. - Для драйвера UMDF этот подраздел находится в
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services
под именем службы драйвера.
Подраздел драйвера всегда использует имя службы драйвера, даже если имя двоичного файла драйвера отличается от имени службы.
DbgBreakOnError
REG_DWORD
Если задано ненулевое значение, платформа прерывается в отладчике, когда драйвер вызывает WdfVerifierDbgBreakPoint. (Если задано значение VerifierOn , платформа прерывается на отладчик, даже если значение DbgBreakOnError не существует.) См. пример кода в разделе VerifierOn .
DbgPrintOn
REG_DWORD
- Для драйвера KMDF задайте это значение в
HKLM\SYSTEM\CurrentControlSet\Control\Wdf\Kmdf\Diagnostics
разделе реестра. - Для драйвера UMDF задайте это значение в
HKLM\System\CurrentControlSet\Control\Wdf\Umdf\Diagnostics
разделе реестра.
Драйверу может потребоваться создать дополнительный подраздел Diagnostics .
Если задано ненулевое значение, загрузчик платформы отправляет различные сообщения в отладчик ядра во время загрузки драйвера и его привязки к версии библиотеки платформы или при выгрузке драйвера.
DbgWaitForSignalTimeoutInSec
REG_DWORD версии платформы 1.11 и более поздних версий
Начиная с Windows 8, если для VerifierOn и DbgBreakOnError заданы ненулевое значение, драйвер может изменить период времени ожидания по умолчанию для взлома отладчика, задав DbgWaitForSignalTimeoutInSec.
DebugModeBinaries
REG_MULTI_SZ, только UMDF
Это значение реестра находится в HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\DebugMode
.
Это значение указывает имена двоичных файлов драйверов для загрузки в режиме отладки. Чтобы включить режим отладки для двоичных файлов драйвера X.DLL, Y.DLL и Z.DLL, например, этому значению X.DLL\0Y.DLL\0Z.DLL\0\0
будет присвоено значение .
DebugModeFlags
REG_DWORD, только UMDF
This registry value is located in HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\DebugMode
.
Значение | Описание |
---|---|
0x01 | Включите режим отладки. Этот параметр отключает функцию автоматического перезапуска, описанную в разделе Использование пулов устройств в драйверах UMDF. |
0x02 | Отключение пула устройств. Дополнительные сведения о пуле устройств см. в статье Использование пулов устройств в драйверах UMDF. |
0x04 | Отключите время ожидания. |
При использовании параметра F5 в Microsoft Visual Studio для развернутого драйвера устанавливаются все три флага.
EnhancedVerifierOptions
REG_DWORD версии платформы 1.9 и более поздних версий
Это значение содержит растровое изображение. Каждый бит представляет собой дополнительный параметр проверки, который пользователи могут включить, задав бит.
Битовые значения:
0x1. Если задано значение , проверятель проверяет, выполняет ли каждая из функций обратного вызова события драйвера следующие действия.
Возвращает в том же IRQL, в котором он был вызван. Если значения отличаются, выполняется WDF_VIOLATION проверка ошибок с кодом ошибки 0xE.
Перед возвратом завершает работу всех критически важных регионов , в которые входит. Если функция обратного вызова возвращается в введенной критической области, выполняется WDF_VIOLATION проверка ошибок с кодом ошибки 0xF.
0x10000. Если задано и драйвер включил гарантированный прогресс для очереди ввода-вывода, платформа имитирует ситуацию нехватки памяти для каждого запроса ввода-вывода очереди.
0x20000: если задано и драйвер включил гарантированный ход выполнения для очереди ввода-вывода, платформа имитирует ситуацию нехватки памяти для некоторых случайно выбранных запросов ввода-вывода.
ForceLogsInMiniDump
REG_DWORD
Задайте ненулевое значение, чтобы платформа включала сведения из своего средства ведения журнала событий в файлы аварийных дампов.
HostFailKdDebugBreak
REG_DWORD, UMDF-only
This registry value is located in HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF
.
Если это значение не равно нулю и к компьютеру подключен отладчик ядра, то перед завершением хост-процесса отражатель прерывает работу отладчика ядра. HostFailKdDebugBreak отключен по умолчанию в операционных системах Windows 7 и более ранних версий. Начиная с Windows 8, HostFailKdDebugBreak включен по умолчанию.
Отражатель также врывается в отладчик ядра, если происходит непредвиденное завершение хост-процесса (например, из-за компонента, отличного от UMDF, или из-за необработанного исключения). При наличии нескольких стеков устройств в пуле в завершаемом хост-процессе отражатель несколько раз врывается в отладчик, по одному разу для каждого стека устройства, загруженного в хост-процесс.
HostProcessDbgBreakOnDriverLoad (для конкретного драйвера)
REG_DWORD, только UMDF, работает с любым драйвером UMDF 1.x/2.x, работающим на целевом компьютере с UMDF версии 2.31 или более поздней.
This registry value is located in HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<service name>\Parameters\Wdf
.
Это значение влияет только на указанный драйвер UMDF.
Содержит значение задержки в секундах. Вызывает попытку WUDFHost подключиться к отладчику в течение указанного количества секунд после загрузки драйвера.
В течение указанного периода задержки главный процесс ищет отладчик пользовательского режима раз в секунду и прерывается, если он подключен. Если отладчик пользовательского режима не подключен в течение этого периода и задан высокий бит в (0x80000000), платформа предпринимает одну попытку взломать отладчик в режиме ядра. Примеры см. в разделе HostProcessDbgBreakOnStart выше.
Чтобы изменения значений реестра UMDF вступили в силу, необходимо перезагрузить компьютер.
HostProcessDbgBreakOnDriverLoad (глобальный)
REG_DWORD, UMDF-only
This registry value is located in HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\{193a1820-d9ac-4997-8c55-be817523f6aa}
. Его можно задать с помощью средства проверки WDF (WdfVerifier.exe) в WDK. Это значение влияет на все драйверы UMDF в системе.
Contains a delay value in seconds. Вызывает задержку WUDFHost на указанное количество секунд после загрузки драйвера. В противном случае поведение HostProcessDbgBreakOnDriverLoad такое же, как описано для HostProcessDbgBreakOnStart.
Если указать HostProcessDbgBreakOnStart или HostProcessDbgBreakOnDriverLoad, платформа отключает другие тайм-ауты UMDF (например, Plug and Play операции). Это означает, что если ваш драйвер вызывает чрезмерное время ожидания, использование этих значений может привести к аварийному завершению работы драйвера на целевом объекте.
HostProcessDbgBreakOnStart
REG_DWORD, UMDF-only
This registry value is located in HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\{193a1820-d9ac-4997-8c55-be817523f6aa}
. You can set it by using the WDF Verifier tool (WdfVerifier.exe) in the WDK. This value affects all UMDF drivers on the system.
Contains a delay value in seconds. During the specified delay period, the host process looks for the user-mode debugger once a second and breaks in if one is connected. Если отладчик пользовательского режима не подключен в течение этого периода и задан высокий бит в HostProcessDbgBreakOnStart (0x80000000), платформа предпринимает одну попытку взломать отладчик в режиме ядра. Пример:
Значение | Результат |
---|---|
0x00000004 | Платформа пытается подключиться к отладчику пользовательского режима раз в секунду в течение 4 секунд. Платформа никогда не пытается подключиться к отладчику режима ядра. |
0x80000000 | Платформа выполняет одну попытку подключения к отладчику пользовательского режима. Если отладчик пользовательского режима не подключен, платформа пытается подключиться к отладчику режима ядра. |
0x80000004 | Платформа пытается подключиться к отладчику пользовательского режима один раз в секунду в течение 4 секунд. Если отладчик пользовательского режима не подключен в течение 4 секунд, платформа пытается подключиться к отладчику режима ядра. |
Это значение реестра также можно задать с помощью средства проверки WDF (WdfVerifier.exe), которое входит в состав WDK.
LogPages
REG_DWORD
Задайте для параметра количество страниц памяти, которое платформа назначает средству ведения журнала событий. Если значение не определено, платформа использует значение по умолчанию, равное одной странице. Максимальное значение, которое можно задать, равно 16 для компьютеров с 4 килобайтами страниц памяти (процессоры x86 и amd64) и 8 для компьютеров с 8 килобайтами страниц памяти (процессоры ia64). (Операционная система может не записывать содержимое журнала в файл аварийного дампа, если указано большое количество страниц.) Используйте директивы AddService и AddReg , чтобы задать это значение в INF-файле следующим образом:
[xxx.NT.Services]
AddService = yyy, 2, zzz.AddService
[zzz.AddService]
DisplayName = %aaa\bbb%
ServiceType = 1
StartType = 3
ErrorControl = 1
ServiceBinary = %12%\ddd.SYS
AddReg = eee.AddReg
[eee.AddReg]
HKR, Parameters\Wdf, LogPages, 0x00010001, 3 ; KMDF IFR size
ObjectLeakDetectionLimit
В некоторых случаях объекты платформы неправильно родительские и не удаляются после использования. С помощью ObjectLeakDetectionLimit и ObjectsForLeakDetection можно указать максимальное количество объектов и то, что должно произойти при превышении этого порогового значения.
REG_DWORD
Задает максимальное количество объектов типов, описанных в разделе ObjectsForLeakDetection . Чтобы определить, должно ли превышение этого порога вызывать прерывание отладки или проверку ошибок, задайте ключ DbgBreakOnError . Ограничение масштабируется с учетом количества установленных устройств, поэтому, если драйвер создает три объекта WDFDEVICE, ограничение в три раза больше, чем значение, указанное в ObjectLeakDetectionLimit.
ObjectsForLeakDetection
REG_MULTI_SZ
Используйте с ObjectLeakDetectionLimit. Список имен каждого типа для проверки. Например, можно указать WDFDMATRANSACTION WDFDEVICE
. Чтобы указать все типы дескрипторов, используйте *
в качестве строки. Если ключ ObjectsForLeakDetection не указан, по умолчанию используется мониторинг WDFREQUEST, WDFWORKITEM, WDFKEY, WDFSTRING, WDFOBJECT и WDFDEVICE.
Если указать WDFREQUEST, проверяющий подсчитывает только создаваемые драйвером объекты WDFREQUEST. В настоящее время эта функция не поддерживает отслеживание типа объекта WDFMEMORY.
TrackHandles
REG_MULTI_SZ
Если задан список из одного или нескольких имен типов дескрипторов объектов платформы, а параметр VerifierOn задан, платформа отслеживает ссылки на все дескрипторы объектов, соответствующие указанным типам дескрипторов. Например, если список типов дескрипторов состоит из строки "WDFREQUEST WDFQUEUE", платформа отслеживает ссылки на все объекты запросов и объекты очереди. Если список содержит звездочку ("*"), платформа отслеживает все дескрипторы объектов.
VerboseOn
REG_DWORD
Если задано ненулевое значение, средство ведения журнала событий платформы записывает дополнительные сведения, которые могут помочь в отладке драйвера, например записи в пути внутреннего кода или выходы из нее. Это значение следует задавать только во время разработки драйвера. См. пример кода в разделе VerifierOn.
VerifierAllocateFailCount
REG_DWORD
Если задано значение n и если параметр VerifierOn задан, платформа завершается неудачей при каждой попытке выделить память для объектов драйвера после n-го выделения. Этот сбой помогает протестировать обработку драйвером условий нехватки памяти. Например, если для параметра VerifierAllocateFailCount задано значение 2, каждое выделение памяти после второго выделения будет завершатся ошибкой. Значение по умолчанию для VerifierAllocateFailCount — 0xffffffff. Задав параметр VerifierAllocateFailCount, вы можете отключить его, установив для него значение (DWORD) -1 или полностью удалив значение.
Обратите внимание, что средство проверки подсчитывает как выделения, запрашиваемые драйвером, так и выделения, запрашиваемые платформой от имени драйвера. Кроме того, обратите внимание, что количество выделений, которые могут возникнуть для драйвера, может измениться с одного выпуска платформы на другой.
VerifierOn
REG_DWORD
Задайте ненулевое значение, чтобы включить средство проверки KMDF, которое широко проверяет состояние и параметры функции драйвера. При разработке драйвера необходимо задать VerifierOn и DbgBreakOnError . Используйте директивы AddService и AddReg , чтобы задать эти значения в разделе Службы INF-файла, например:
[xxx_Inst.NT.Services]
AddService = xxx,%SPSVCINST_ASSOCSERVICE%,xxx_Service_Inst
[xxx_Service_Inst]
ServiceType = %SERVICE_KERNEL_DRIVER%
StartType = %SERVICE_BOOT_START%
ErrorControl = %SERVICE_ERROR_NORMAL%
LoadOrderGroup = "Base"
ServiceBinary = %12%\xxx.sys
AddReg = KMDFVerifierAddReg
[KMDFVerifierAddReg]
HKR, Parameters\Wdf,VerifierOn,0x00010001,1
HKR, Parameters\Wdf,VerboseOn,0x00010001,1
HKR, Parameters\Wdf,DbgBreakOnError,0x00010001,1
VerifyDownLevel
REG_DWORD, платформа версии 1.9 и более поздних версий
Если задано ненулевое значение и драйвер был создан с версией платформы, которая старше текущей версии, средство проверки платформы включает тесты, добавленные после сборки драйвера. Если это значение не существует или равно нулю, средство проверки платформы включает только тесты, которые существовали при сборке драйвера.
Например, если ваш драйвер был создан с использованием версии 1.7 платформы и если на компьютере установлена версия 1.9 платформы, установка параметра VerifyDownLevel в значение nonzero приведет к тому, что проверяющий будет включать тесты, добавленные в версию 1.9 средства проверки при запуске драйвера.
VerifyOn
REG_DWORD
Задайте ненулевое значение, чтобы включить макрос WDFVERIFY , определенный в Wdfassert.h, или нулевое значение, чтобы отключить макрос. Если задано значение VerifierOn, параметру VerifyOn неявно присваивается ненулевое значение.