ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

ContextMenu Manager Plus 如何搞定 Windows 权限与用户上下文:HKCU、HKEY_USERS 与 LocalSystem 服务的坑

ContextMenu Manager Plus 如何搞定 Windows 权限与用户上下文:HKCU、HKEY_USERS 与 LocalSystem 服务的坑 ContextMenu Manager Plus 如何搞定 Windows 权限与用户上下文HKCU、HKEY_USERS 与 LocalSystem 服务的坑【免费下载链接】ContextMenuMgrContext Menu Manager Plus 是一个强大的实用程序它可帮助您管理 Windows 上的右键菜单并避免第三方向你的右键菜单里塞屎项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuMgrContextMenu Manager Plus 是一款强大的 Windows 右键菜单管理工具它通过先拦截、再审核的机制阻止第三方软件向你的右键菜单塞东西。而它最硬核的地方是同时驾驭了三类 Windows 身份普通 WPF 前端、LocalSystem 后端服务和一次性 UAC 提权进程。对普通用户来说理解这套权限与用户上下文的分工就能明白为什么它的设置能精确落到你个人头上而不会误伤整台机器。三个身份各管一摊ContextMenu Manager Plus 的架构ContextMenu Manager Plus 并不是单一权限模型它由三个角色协作完成右键菜单管理角色身份职责WPF 前端普通用户权限不提权界面交互、全局搜索、发起菜单开关后端服务LocalSystemSYSTEM注册表扫描、读写、监控与审核队列UAC Bootstrapper提权的一次性进程安装/修复/卸载服务跑完即退这套分工的完整说明在 docs/process-and-privilege-flows.md它把整个链路拆成 A前端→管道→服务、B前端→UAC、C服务→用户会话进程、D前端→ProbeHost四条是理解后文所有坑的地图。坑一LocalSystem 服务的 HKCU 不是你的 HKCU这是新手最容易踩的雷。后端服务以 LocalSystem 身份运行它眼中的HKCUHKEY_CURRENT_USER指向的是 SYSTEM 账户的配置而不是当前坐在电脑前的你。如果服务图省事直接读写HKCU你的随系统启动开关、Win11 菜单屏蔽列表就会全部写丢。ContextMenu Manager Plus 的解法是任何用户级操作都必须基于你的用户 SID 定位注册表 hive。后端在 BackendUserContextResolver.cs 中从管道连接解析出真实发起请求的用户封装成一个携带Sid、UserName、ProfilePath、SessionId等字段的用户上下文记录定义在 BackendUserContext.cs。官方文档 docs/process-and-privilege-flows.md 对此有一条铁律权限、用户身份、用户注册表 hive、桌面 Session 是四个不能互相替代的概念——LocalSystem 权限再高它的HKCU也不是你的HKCU。坑二HKEY_USERSSID 才是服务定位你注册表的正确姿势那服务到底去哪儿改你的右键菜单答案是HKEY_USERS\你的SID这个明确路径。ContextMenu Manager Plus 需要用户 SID 的典型场景包括 Win11 用户级屏蔽列表HKEY_USERS\sid\Software\Microsoft\Windows\CurrentVersion\Shell Extensions\Blocked⚙️ AutoStart 自启动策略HKEY_USERS\sid\Software\ContextMenuMgr\Frontend ShellNew新建菜单、SendTo、Win X、OpenWith 等特殊入口另一个高频误区是把HKCR当成真实写入路径。HKEY_CLASSES_ROOT只是用户级 Classes 和机器级 Classes 的合并视图——读它方便写必须明确选边。后端为此专门实现了 FrontendUserClassesRoot.cs通过WTSQueryUserToken拿到前端用户会话的 token再调用RegOpenUserClassesRoot打开属于你的 HKCR 合并视图只用于只读发现写入时仍回到显式的HKEY_USERS\SID或HKLM物理路径。坑三服务在非交互会话运行打不开你的桌面Windows 服务运行在一个看不见屏幕的非交互式 Session 里它不能直接在你桌面上弹窗口。所以当 ContextMenu Manager Plus 检测到新增菜单项、想在托盘里通知你并拉起前端时后端服务必须跨越会话边界用WTSGetActiveConsoleSessionId找到当前活跃的交互式会话通过WTSQueryUserToken取到该会话的用户 token 并解析出 SID读取HKEY_USERS\sid下你的StartWithWindows策略决定是否该启动用DuplicateTokenExCreateProcessAsUser把托盘宿主TrayHost精确拉起到winsta0\default桌面上。整条逻辑位于 FrontendAutostartLauncher.cs。文档 docs/process-and-privilege-flows.md 还特别提醒SessionId解决的是在哪个桌面启动进程不要把它当成 SID 来写注册表——这两件事在本项目中走的是完全不同链路。坑四UAC 提权 ≠ 用户上下文--user-sid 是关键安装、修复或卸载后端服务需要管理员权限前端会通过Verbrunas触发 UAC 弹框启动一个一次性的 elevated 进程执行 BackendServiceBootstrapper.cs。但这里有个隐蔽的坑提权进程自己的HKCU同样不等于前端用户的HKCU。所以 ContextMenu Manager Plus 在执行install-or-repair或set-startup-mode时会显式带上--user-sid参数让提权进程知道你是谁再去读取或写入HKEY_USERS\sid\Software\ContextMenuMgr\Frontend的自启动策略而不是猜。文档 docs/process-and-privilege-flows.md 强调UAC bootstrapper 只负责服务生命周期维护普通菜单开关等运行时操作绝不能借道提权走。坑五ACL 保护要分清谁的权限ContextMenu Manager Plus 的注册表写保护Registry Write Protection是给受监控菜单根键加 ACL 拒绝规则防止第三方随意写入。它的实现见 RegistryProtectionAcl.cs针对 Builtin Users 和 Authenticated Users 分别设置直接拒绝与容器继承拒绝。这里同样有身份问题保护规则要同时覆盖HKLM 机器级和前端用户 SID 的 HKU 级两个物理目标且缺少前端 SID 或用户 hive 未加载时必须直接失败不能半吊子地只锁机器级。注册表模型的细节可参阅 docs/registry-model.md。四条链路速查表什么操作走什么权限功能链路需要用户 SID需要 SessionId传统菜单启用/禁用A管道→服务用户级项需要否Win11 菜单项禁用/恢复A是否ShellNew / SendTo / WinX 特殊菜单A是ShellNew 需要安装/修复服务BUAC Bootstrapper是否托盘拉起前端 / 重启资源管理器C服务→用户会话视情况是第三方 Shell Extension 深入分析DProbeHost 隔离进程否否出问题时看哪里日志速查当权限相关的问题出现时ContextMenu Manager Plus 的日志比界面提示更值钱。主要日志都在 RuntimePaths.cs 定义的目录里Installer 包位于%ProgramData%\ContextMenuMgr\Logs 用户级注册表写错 → 看backend.log中Sid、HKEY_USERS\sid、OpenUserRegistryRoot相关记录 服务安装/修复失败 → 看bootstrap.log和service-startup.log 托盘不出现 → 看backend.log的TryEnsureTrayHost记录与trayhost.log 前端连不上后端 → 先看frontend-debug.log再看service-startup.log完整排错思路见 docs/troubleshooting.md。总结一句话记住每个坑LocalSystem 的HKCU是 SYSTEM 的永远别当用户配置用用户级写入认准HKEY_USERS\SIDHKCR只读不写服务在别的会话里要拉桌面进程必须走用户 token SessionIdUAC 提权不带来用户上下文--user-sid才是桥梁SID 管注册表、SessionId 管桌面两者绝不混用。ContextMenu Manager Plus 把这些 Windows 权限的暗坑全部处理在服务端你只需在界面里点开关——而它能做到这一点靠的正是对 HKCU、HKEY_USERS 与 LocalSystem 边界的严格区分。【免费下载链接】ContextMenuMgrContext Menu Manager Plus 是一个强大的实用程序它可帮助您管理 Windows 上的右键菜单并避免第三方向你的右键菜单里塞屎项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuMgr创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表