Можно ли использовать функцию песочницы Windows для тестирования драйверов?
Разрабатывая драйверы для Windows впервые, я хочу развернуть свой первый драйвер. Но у меня нет второго компьютера.
Документы Microsoft:
Обычно при тестировании и отладке драйвера отладчик и драйвер запускаются на разных компьютерах. Компьютер, на котором запущен отладчик, называется главным компьютером, а компьютер, на котором запущен драйвер, называется целевым компьютером. Целевой компьютер также называется тестовым компьютером.
Я начинаю с vhidmini2 в качестве основы моего проекта (версия UMDF2). Я хочу знать, можно ли использовать Windows Sandbox вместо тестового компьютера? Мой драйвер не будет взаимодействовать с каким-либо оборудованием.
2 ответа
Вы можете настроить песочницу Windows для отладки ядра с помощьюCmDiag
(недокументировано, но упомянуто Джонасом Л. ):
Сначала вам нужно включить режим разработки (все нужно запускать из командной строки администратора):
CmDiag DevelopmentMode -On
Затем включите сетевую отладку (дополнительные параметры можно увидеть с помощьюCmDiag Debug
):
CmDiag Debug -On -Net
Это должно дать вам строку подключения:
Debugging successfully enabled.
Connection string: -k net:port=50100,key=cl.ea.rt.ext,target=<ContainerHostIp> -v
Теперь запустите WinDbg и подключитесь к127.0.0.1
:
windbg.exe -k net:port=50100,key=cl.ea.rt.ext,target=127.0.0.1 -v
Затем вы запускаете Windows Sandbox, и он должен подключиться:
Microsoft (R) Windows Debugger Version 10.0.22621.1 AMD64
Copyright (c) Microsoft Corporation. All rights reserved.
Using NET for debugging
Opened WinSock 2.0
Using IPv4 only.
Waiting to reconnect...
Connected to target 127.0.0.1 on port 50100 on local IP <xxx.xxx.xxx.xxx>.
You can get the target MAC address by running .kdtargetmac command.
Connected to Windows 10 19041 x64 target at (Sun Aug 7 10:32:11.311 2022 (UTC + 2:00)), ptr64 TRUE
Kernel Debugger connection established.
(Когда я настроил это изначально, я получил некоторую ошибку при запуске Windows Sandbox, и мне пришлось перезагрузиться, но это может быть необязательно)
Несколько раз я получил ошибку0x80070020
, похоже, это связано с тем, что порт недоступен (возможно, зарезервирован Hyper-V?). Переключение на порт12345
исправил это для меня.
Песочница Windows — это, по сути, виртуальная машина, поэтому вы можете загружать в нее драйверы, если им не нужно взаимодействовать с оборудованием.
Но есть и одно дополнительное ограничение: похоже, не существует способа отключить проверку подписи драйверов в песочнице Windows, поскольку для этого требуется перезагрузка, что невозможно для песочницы. Таким образом, ваш драйвер подписан для загрузки и тестирования.