You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
摘要
Windows 上,只要会话文件策略是默认的
workspace-write,pwsh工具每一次调用都失败:失败是静默的:无 stdout、无 stderr、无
[sandbox: file access denied ...]策略拒绝提示、也没有 ACL runner 的失败方言(windows-acl-run: ...)。但同一台机器、同一个
pwsh、完全相同的 runner 参数,直接调用 DSH 自带的沙箱 runner(@deepseek-ai/dsh-sandbox-windows-acl/lib/runner.js --mode workspace-write)却能正常启动并执行(且受限确实生效——受限子进程内写工作区外被拒绝)。因此问题不在 PowerShell 版本、不在 MSIX 打包、不在 ACL runner 本身,而在
dsh-pwsh-sandbox/dsh-tool-pwsh与 runner 之间的接线;并且工具层吞掉了可用于定位的失败信息。环境
10.0.26200dsh-desktop),<DSH_INSTALL>\DeepSeek Harness.exeworkspace-write(复现时)C:\Program Files\PowerShell\7\pwsh.exe= 7.6.6(MSI 安装)C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe(5.1)<WORKSPACE>复现步骤
前置:从
app.asar抽出 DSH 自带的 ACL runner 与依赖(脚本随附,见文末):A. 工具侧(失败)
workspace-writepwsh命令预期:命令执行并返回输出。
实际:
(no output)+[exit code: 3221225794]。B. runner 直调侧(成功)
pwsh-writeprobe在受限子进程内尝试写C:\被拒绝,证明沙箱在强制、且 pwsh 在受限令牌下能正常启动并执行命令。C. 对照(成功):同一会话切到
danger-full-access后,pwsh工具完全正常:判定矩阵
pwsh+workspace-write0xC0000142(多轮稳定复现)pwsh+danger-full-accessworkspace-write+ pwsh 7.6.6SANDBOX_PWSH_OKworkspace-write+ cmd.exeSANDBOX_CMD_OKworkspace-write+ PS 5.1SANDBOX_PS51_OKwindows-acl-run: ...明确 stderr工具侧实际进程命令行
工具调用期间抓到的进程树:
dsh-subprocess-local/lib/runner.js通过spawnCurrentTokenJobProcess(普通令牌)启动目标进程,自身不施加隔离;隔离由dsh-pwsh-sandbox经ctx.sandbox.confine()挂在外层(沙箱生效时应出现@deepseek-ai/dsh-sandbox-windows-acl/lib/runner.js --workspace <ws> --temp <t> --mode workspace-write -- ...这一层包装)。为什么"静默"本身是个问题
@deepseek-ai/dsh-sandbox-windows-acl的设计约定是:runner 侧失败一律向 stderr 打印windows-acl-run: <detail>并以 127 退出(seam 通过该签名分类为"沙箱损坏")。而本故障的观测是 纯0xC0000142+ 零 stderr,说明:已排除 / 待验证
已排除:
windows-acl-run:+ exit 127;本故障静默dsh-subprocess-local的 Job/stdio 机制danger-full-access下工作正常workspace-write生效,且该回合内持续失败dsh-pwsh-sandbox传给 ACL runner 的--workspace/--temp/ 环境参数与 runner 直调形态不一致,导致受限子进程所需对象的权限不足 → 早期 DLL 初始化被拒;0xC0000142)。需要在工具层调用形态下转储受限令牌与 DACL 才能定论。
附带问题:策略切换只在回合边界生效
会话文件策略的切换只在「回合边界」生效,同一回合内的后续工具调用仍走旧策略。这会让诊断得出互相矛盾的结论:
workspace-write后,同回合内的工具调用仍失败(实为旧策略的调用)danger-full-access后,同回合内的探针显示"工作区外写入被允许"(新策略),但随后的工具调用仍按旧的无沙箱路径执行(进程树里没有任何沙箱包装层)建议:在工具结果里标注"本次调用实际生效的策略 / 是否被隔离",避免此类误判。
建议的改进
0xC0000142无任何文本,定位成本极高)denialSignatures/fatalSignatures机制,本案例未被触发)复现包
00-build-runner.jsapp.asar抽取 ACL runner 及依赖(迭代解析,自愈)repro.ps101-tool-side.ps1workspace-write生效的回合里运行;第一步先自检沙箱是否真在强制result-runner-direct.mdrepro.ps1实测输出留档All reactions