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

Aks*_*ngh 4 windows umdf windows-sandbox

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

微软文档

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

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

mre*_*dia 5

您可以使用以下命令设置 Windows Sandbox 进行内核调试CmDiag(未记录,但Jonas L 提到过):

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

CmDiag DevelopmentMode -On
Run Code Online (Sandbox Code Playgroud)

然后启用网络调试(您可以使用 看到其他选项CmDiag Debug):

CmDiag Debug -On -Net
Run Code Online (Sandbox Code Playgroud)

这应该给你连接字符串:

Debugging successfully enabled.

Connection string: -k net:port=50100,key=cl.ea.rt.ext,target=<ContainerHostIp> -v
Run Code Online (Sandbox Code Playgroud)

现在启动 WinDbg 并连接到127.0.0.1

windbg.exe -k net:port=50100,key=cl.ea.rt.ext,target=127.0.0.1 -v
Run Code Online (Sandbox Code Playgroud)

然后启动 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.
Run Code Online (Sandbox Code Playgroud)

(当我最初设置它时,启动 Windows Sandbox 时遇到一些错误,我必须重新启动,但这可能不是必要的)

有几次我收到错误0x80070020,这似乎是因为该端口不可用(可能由 Hyper-V 保留?)。切换到端口12345为我解决了这个问题。