Repository navigation
Replies: 3 comments
|
This taxonomy is the human index for exactly the routing I maintain as a runtime one, so I think the two are complementary rather than competing.
The hook path is a separate package: Two honest boundaries, since this is a routing thread: both packages are observational — they name and route, they do not repair the sandbox — and the last two rows of your table (credential acquisition under the restricted token, and the eager first-provisioning freeze) are outside what either can observe. |
|
Thanks for mapping the advisors to the branches here. That is exactly
the complementary role I had in mind: the index helps someone choose
where to look, while a runtime diagnostic can narrow it down when the
available signals are specific enough.
The hook-policy fallback is a particularly useful distinction, since
it can look like a sandbox failure when it isn't one. I also
appreciate the clear limits on what the tools can observe, and the
distinction between diagnosing a failure and fixing it.
This gives the index a much more useful connection to tools people can
actually run.
…On Thu, 08 Oct 2026 15:16:56 -0700, argszero ***@***.***> wrote:
This taxonomy is the human index for exactly the routing I maintain as a runtime one, so I think the two are complementary rather than competing.
@argszero/cordis-plugin-sandbox-grant-advisor (latest 0.16.0) sits on the public tools/post-execute seam and recognizes five of the branches above from structured facts — the sandbox mode, value.sandbox, and the producer's own wording — then prints a discriminator plus the reproducible cause, and never recommends anything it has not measured:
- ACL provisioning (SetNamedSecurityInfoW failed (Win32 5): grantWrite(...)) — your first row;
- persistent PTY startup death;
- native-init death (0xC0000142) — here it deliberately does not name a cause from the code alone, which is the same rule your "same exit code, different experiments" section states. 0.16.0 added the restricting-list capability-SID producer and the two discriminators that separate it (mode split: does read-only survive; and whether a runner-side windows-acl-run: line exists at all);
- workspace-internal denial — including both the per-lifetime grant-cache branch you point at from [#8409](#8409) (a restart is the only lever) and the Low-integrity-label half you cite as [#8383](#8383);
- pre-spawn temp / workspace containment ("Windows ACL temp root must be outside the workspace", [#9175](#9175)).
The hook path is a separate package: @***@***.*** covers a child spawned by a hook (SessionStart / PostToolUse) that silently falls back to the deployment-default workspace-write, because hooks do not carry the session's resolved policy — that one is not a sandbox failure at all, it is a missing-policy fallback.
Two honest boundaries, since this is a routing thread: both packages are observational — they name and route, they do not repair the sandbox — and the last two rows of your table (credential acquisition under the restricted token, and the eager first-provisioning freeze) are outside what either can observe.
—
Reply to this email directly, [view it on GitHub](#9195?email_source=notifications&email_token=CHDJZC4W7CDWJ2BQIU6CXNL5TAG5RA5CNFSNUABIM5UWIORPF5TWS5BNNB2WEL2ENFZWG5LTONUW63SDN5WW2ZLOOQXTCOBYGI2DMNZWUZZGKYLTN5XKMYLVORUG64VFMV3GK3TUVRTG633UMVZF6Y3MNFRWW#discussioncomment-18824676), or [unsubscribe](https://github.com/notifications/unsubscribe-auth/CHDJZC3ZWPR4EKAEYRQSDDT5TAG5RAVCNFSNUABJKJSXA33TNF2G64TZHMYTGMZTGA3DKMBZGE5UI2LTMN2XG43JN5XDWMJQHE3TSMBVGGQXMAQ).
You are receiving this because you authored the thread.
|
Cross-check of the token Default-DACL family (#8534 / #8599 / #8775 / #9038) on an independent machine — Windows 11 22H2 (build 22621) x64, desktop Every arm below is the shipped runner, on the same host, same workspace, same runner copy:
So here the two known remedies are each sufficient, and the Default-DACL arm works without changing the host/console topology. That makes the DACL the structural condition on this host and the console-less host the trigger: the child only has to create a console of its own when the runner owns none, and that is where the deficient default DACL bites. Supporting facts, read from the shipped tree rather than inferred:
Smallest control that separates the two families for a new report: hold host, token construction and target fixed, and toggle only whether the runner owns a console. If the child still dies, it is the Default-DACL arm, not the console arm. (Comparing Full matrix and the corrected wording: #9280. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Several Windows sandbox reports currently collapse into the same top-level symptom —
workspace-writefails, shell tools stop working, or a child exits with0xC0000142 / STATUS_DLL_INIT_FAILED. After comparing the reports, those are not safe to treat as one bug.This post is meant to be a routing/index thread, not a new root-cause claim. #8485 already surfaced the need for an overview because individual reports were becoming hard to relate without re-reading the whole history.
Start here: where does the failure happen?
SetNamedSecurityInfoW failed (Win32 5): grantWrite(...)0xC0000142and no outputwindowsHide/CREATE_NO_WINDOW-style paths failread-onlyworks,workspace-writefails, and A/B testing points at the restricted token's default DACL / capability SIDsandbox-windows-acldocumented boundarySANDBOX_UNAVAILABLEand every later command in the session fails on the same private temp path that was deleted. It clears only when the provider / DSH restarts--temp is not an existing directoryalthough the directory exists and was created moments earlierWindows ACL temp root must be outside the workspace, even forecho. A restart does not change the condition.lnkicons, Internet-zone prompts, a broken install directory--profile <name> is required, duplicate native types, or NULL std handlesSEC_E_NO_CREDENTIALSwhile Node/Python workA switch to
danger-full-accessmaking the command work only tells us the failure is inside the confined execution path. It does not identify which branch above is responsible.The important distinction: same exit code, different experiments
Two examples show why the error code alone is not enough:
So I would avoid merging new
0xC0000142reports until the reporter has run a small matrix that separates host, creation flags, token/DACL behavior, and stdio shape.ACL provisioning is a different failure stage
If the first error is:
the child process has not reached the same startup path yet. Reports such as #7504 and #7816 tie this family to the workspace ACL /
WRITE_OWNERprecondition. #8409 covers two provisioning defects plus a distinct defect that is not about provisioning at all: on the packaged Desktop form the standing workspace grant is materialised once per workspace per server lifetime and never re-validated, so once the root ACE is lost even the workspace root becomes unwritable until the app restarts. That one is a post-provisioning cache problem, and mixing it with the provisioning family hides it.This is also the branch where the bundled
diagnose-windows-sandbox-aclworkflow is relevant. A successful ACL diagnosis or repair should not be used to rule out the other process-startup families above.Minimal diagnostic matrix for a new report
If you hit a Windows sandbox failure, the following data is much more useful than the exit code alone:
What I would not infer from a report
0xC0000142does not mean same root cause.0xC0000135while its decimal3221225794is0xC0000142. Check the arithmetic before treating a new code as a new mechanism.Why keep an index?
The useful output here is not a larger list of bugs. It is a way for the next Windows report to answer, quickly:
If you have a report that should be added or moved, please reply with the Discussion number plus the smallest A/B result that distinguishes it. I can keep this post updated as the branches converge, split, or get fixed.
中文简要说明
这个帖不把
0xC0000142当成一个统一根因,而是作为 Windows sandbox 的路由索引。优先判断失败发生在哪一层:ACL 授权阶段、子进程启动阶段、GUI/无控制台宿主、
CREATE_NO_WINDOW/隐藏窗口路径、restricted token Default DACL、子孙进程的 pipe/stdio、MSYS/命名对象一类 IPC 路径,以及另外几类同样会让人误以为"沙箱坏了"的现象:临时目录缓存失效(同一 session 内持续,重启后重建)/临时目录存在但创建者已无法访问/temp root 落在工作区内、已存在的子目录写不进、Low 完整性标签影响工作区外的真实文件和工具、runner 根本没起来、沙箱内 HTTPS 凭据失败、大工作区首次授权卡住。如果后续有新的 Windows 报告,最好附上上面的最小 A/B 矩阵,而不是只贴退出码。另外请留意:一个报告里的十六进制错误码和它自己的十进制值可能不一致,先核对换算再把新码当成新机制。这样可以避免把不同机制继续堆进同一个
0xC0000142桶里。All reactions