Repository navigation
Windows 桌面版:「工作区内修改」(workspace-write) 沙箱下所有命令以 0xC0000142 (STATUS_DLL_INIT_FAILED) 退出 #11297
Unanswered
Mashen-123
asked this question in
Q&A
Replies: 1 comment
|
你这条环境里有个决定性字段:运行用户是
修复是 版本口径很重要:rc.4( 现阶段的绕过办法:换一个非内置 Administrator 的账户(普通管理员账户就行)跑桌面端;或者等下一个 alpha。 我只读了源码和追记( |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Windows 桌面版:「工作区内修改」(workspace-write) 沙箱下所有命令以 0xC0000142 (STATUS_DLL_INIT_FAILED) 退出
环境
D:\Program Files\DeepSeek Harness(非默认盘符)powershell.exe版本 5.1.26100.9444(build 26100)BIELNB1094\Administrator(SIDS-1-5-21-2189205611-531090084-720113286-500),完整性级别 HighC:\Program Files\PowerShell\7\pwsh.exe不存在,PATH 中也没有可用的pwsh.exe,shell 解析落回系统WindowsPowerShell\v1.0\powershell.exeresources\runtime\primary-runtime\dependencies\node\bin\node.exe(v24.21.0)现象
会话权限设为「工作区内修改」时,任何 shell 调用都在启动阶段以退出码
3221225794(0xC0000142,STATUS_DLL_INIT_FAILED)结束,且没有任何输出。多次重试、换命令、换工作目录均一致,模型侧表现为 "pwsh is broken entirely"。同一会话改为「完全权限」或「自动审查」后一切正常;「仅可查看」实测也正常。
复现步骤
Get-ChildItem "$HOME\.dsh"。3221225794,无 stdout/stderr。预期:命令被沙箱约束执行,正常返回输出。
实际:子进程从未完成 DLL 初始化,直接以
0xC0000142终止。根因分析
1. 沙箱 runner 由
process.execPath启动packages/sandbox/sandbox-local/src/index.ts的windowsAclRunnerInvocation()返回[process.execPath, builtEntry]。桌面版中process.execPath是 Electron 可执行文件本身。进程列表可以确认当前 DSH 服务与子进程层都跑在 Electron 二进制上:
因此 ACL 沙箱的 runner 同样是
[DeepSeek Harness.exe, <asar>\...\dsh-sandbox-windows-acl\lib\runner.js, ...]。2. 从
app.asar解出真实 runner 做宿主对照从安装目录的
app.asar中提取真实的dsh-sandbox-windows-aclrunner(同一份 0.2.1-rc.3 产物,补齐 koffi 原生模块),用不同宿主进程启动同一条 argv,目标为powershell.exe,参数与 DSH 实际调用一致(--workspace、--temp为会话的私有 temp 目录、--mode、--write-sid、--temp-write-sid,并保留DSH_SUBPROCESS_CONTROL=pipe的第 7 号控制管道):node.exe(随包 Node v24.21.0)0,输出正常node.exe0,输出正常DeepSeek Harness.exe(ELECTRON_RUN_AS_NODE=1)0,输出正常DeepSeek Harness.exe0xC0000142结论:runner 逻辑与 token 构造本身没问题,故障只在「Electron 作为 runner 宿主」且「模式为 workspace-write」时出现;把宿主换成随包
node.exe后两种模式都正常。3. 失败点在 runner 派生的受限子进程,而非 runner 自身
在 runner 入口插入一行
console.error('RUNNER-START ' + process.execPath)后重跑:两种宿主都打印了该行,说明 runner 已正常启动并执行到CreateProcessAsUserW;0xC0000142来自被沙箱包裹的子进程。4. 已排除的变量
逐项做了对照,均与本问题无关:
Everyone的DeleteSubdirectoriesAndFiles拒绝项、Low 完整性标签(工作区上这些常驻项符合设计,不是损坏)--write-sid/--temp-write-sid)DSH_SUBPROCESS_CONTROL=pipe)node.exerunner 依然成功)node.exe与 Electron 进程的process.env逐项比对完全一致)cmd.exe同样失败;GUI 目标在只读模式下成功)CreateRestrictedToken+ Low 完整性 + default DACL 授权 + kill-on-close Job + TEMP 改写的独立探针,全部成功5. 尚未定位
Electron 作为父进程时,受限子进程为何在 loader 初始化阶段失败,本轮没有定位到具体机制(控制台、Job、process mitigation、环境块均已排除)。现象本身是确定性、可稳定复现的。
影响
建议修复
process.execPath:windowsAclRunnerInvocation()检测process.versions.electron,改用随包的 Node 运行时(resources/runtime/primary-runtime/dependencies/node/bin/node.exe)。同一台机器上该改动已验证可使 workspace-write 恢复正常。dsh-subprocess-local的 runner 也通过process.execPath启动(见上方进程列表);虽然它派生的子进程不受限、目前未出错,建议一并统一到同一 Node 运行时,避免同类问题。0xC0000142结束。补充说明
复现过程中未修改安装目录、未手工改动任何 ACL;实验用的解包 runner 与探针脚本已清理。工作区上残留的
S-1-4-…授权项、Everyonedeny 与 Low 标签是沙箱的常驻授权缓存,属预期行为,不属于本问题。All reactions