windows沙箱功能可以用于驱动程序测试吗



第一次开发windows驱动程序时,我想部署我的第一个驱动程序。但是我没有第二台电脑。

Microsoft文档:

通常在测试和调试驱动程序时,调试器和驱动程序在不同的计算机上运行。运行调试器的计算机被称为主机,运行驱动程序的计算机被称作目标计算机。目标计算机也称为测试计算机

我开始使用vhidmini2作为我的项目基础(UMDF2版本(。我想知道Windows沙盒功能是否可以代替测试计算机?我的驱动程序将不会与任何硬件交互。

您可以使用CmDiag(未记录,但Jonas L提到过(为内核调试设置Windows沙盒:

首先,您需要启用开发模式(一切都需要从管理员命令提示符下运行(:

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沙盒,它应该连接:

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 Sandbox基本上是一个虚拟机,因此您可以将驱动程序加载到其中,只要它们不需要与硬件交互。

但还有一个额外的限制:似乎没有办法在Windows沙盒中禁用驱动程序签名检查,因为这需要重新启动,而沙盒是不可能的。因此,您的驱动程序已被签名以进行加载和测试。

编辑:自Windows 11 Build 2250以来,Sandbox支持重新启动,因此现在应该可以禁用驱动程序签名并安装自定义驱动程序(但无法测试,仍在W10上(。

最新更新