永久禁用注册表(FileExts)中的用户选择覆盖?

永久禁用注册表(FileExts)中的用户选择覆盖?

简短而甜蜜:

有没有办法真正禁用Win7中的注册表项HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts?

在受影响的系统上,用户不应该能够设置自己的关联,因此这种无能在这里不是一种负担。但仅仅禁止用户是不够的;这很容易。我还需要禁止 Windows 本身写入密钥,而且即使是 SYSTEM 只读权限也无法做到这一点(请参阅文章结尾)。

长而丑:

在 Win7 Pro SP1 上遇到一种情况,更新(仅限关键)至 2017 年 10 月。VLC 和各种编辑应用程序用于音频和视频文件。不幸的是,对于几种类型的文件,我需要 Windows Media Player 作为查看器,所以我无法摆脱这个臭鼬,这是一个问题。我有一个非常精心配置的多媒体文件扩展名集,使用 HKLM\Software\Classes 中的普通扩展名和文件类型 ID 设置。我安装 VLC 和编辑应用程序,但不允许它们与任何东西关联,然后我自己创建所有关联和上下文菜单条目,在此过程中消除了许多它们自己的和原生的 Microsoft 上下文菜单混乱,以促进更好的工作流程。

这个田园诗般的梦想的问题在于,Windows Media Player 通过劫持与注册表项 HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts 的关联来绕过我的配置。如果您只是删除该项,Windows 只会重新创建并重新填充它。所以我需要完全禁用/锁定 FileExts 注册表项,这样它就不会破坏我配置的精心设置。

但这不仅仅是 WMP 的问题:其他程序也会导致其各自文件类型的相同问题。我在图形应用程序方面也遇到了类似的问题。因此,请不要提供仅处理 WMP 的解决方案。我需要一个完全禁用通过 FileExts 键提供的用户选择覆盖的解决方案。换句话说,我需要让 FileExts 键不仅对所有人都不可访问,而且对一切

这是否会导致我以后失去某些程序的功能并不重要:如果某些应用程序无法在 HKLM\Software\Classes 中以正确的方式设置其关联,我会自己设置。所以请不要因为这个问题而指责我。事实上,FileExts 对于 Win7 的运行完全没有必要。它甚至对于 WMP 的运行也是不必要的——它唯一的作用就是让微软能够将其魔爪深深地扎根,因此很难从它希望您使用的应用程序(例如 WMP)手中夺取控制权。好吧,它还允许用户通过一种简单的 GUI 方式来设置单个文件类型的关联。但正如我在上面的 TL/DR 中提到的那样,这不是问题。

我尝试过:在取得密钥所有权并删除其下的所有内容后,我对 SYSTEM 和管理员组都施加了只读权限,但无济于事(首先拒绝一切,然后归还查询值、枚举子项、通知、读取控制)。这应该像铁制贞操带一样锁定密钥,但没有成功。尽管警告消息说拒绝权限将胜过其他一切,但事实并非如此。下次系统重新启动时,FileExts 再次显示其一百多个默认条目。

那么有没有办法清空然后真正禁止这个键,或者 M$ 已经使这变得不可能了?

答案1

让 Windows 做它想做的事;您可以通过以下方式用您自己的喜欢的内容自动覆盖这些键:1) 编辑注册表以适应需要,2) 将这些键导出到 .reg 文件,3) 使用 reg 或 regedit.exe 命令重新导入,这些命令是在设置为每次登录时或按需运行的计划任务中执行的。

答案2

哈利路亚。

重读相关章节后Windows 7 的烦恼我终于能把所有线索拼凑起来了。

要创建有效的注册表锁定,关键在于理解拒绝权限胜过允许权限。例如,拒绝查询值将禁用指定用户的查询值,即使还存在允许该用户的查询。现在,这对任何人来说都不是新闻,但其含义对于此处讨论的问题很重要。我从以下段落中得出了关键线索:

“[锁定注册表项时] 您可能倾向于删除特定用户(甚至所有用户)的“允许”权限,而不是添加“拒绝”条目。。。问题是,这样做不会阻止应用程序或 Windows 取得所有权或添加必要的权限并打破您的锁定。。。[要] 使密钥只读。。。在“设置值”、“删除”和“写入所有者”旁边放置一个“拒绝”复选框”。(David Karp,Windows 7 的烦恼,156)[并且,为了安全起见,我还会向“创建子键”添加拒绝。]

这段话断言,如果你删除允许权限而不是设置拒绝权限,那么出于某种原因,即使没有人应该被允许,Windows 和其他应用程序也将能够绕过你的设置。卡普没有解释为什么会出现这种情况,但尽管他的评论很简短,但它确实清楚地表明,删除允许权限无法阻止 Windows 做它想做的事情。它还清楚地表明,直接拒绝是无法逃避的。所以你应该设置拒绝权限,而不是删除允许。

但这并不是全部。我开始的过程确实是从拒绝开始的(见 OP,倒数第二段)。我检查了整个拒绝列。但是,我随后还转到允许列并重新检查了所有授予读取权限的项目:枚举子键、查询值、读取和执行等等。这就是致命弱点。即使我没有允许任何写入权限,允许任何权限设置拒绝后似乎与删除允许具有相同的效果,从而否定了通过设置拒绝实现的网络锁定。所有人类用户,甚至管理员,仍然无法修改密钥,但 Windows 并非如此。当然,情况不应该如此。我确实为 Everyone 用户设置了正确的拒绝,据说这些拒绝胜过其他一切。与 Microsoft 的许多其他功能一样,此功能并不总是像宣传的那样有效。但只要您不触摸“允许”列,它就会起作用。

验证是否拒绝允许工作正常,我恢复了注册表备份,以便从头开始。然后我回到密钥,什么也没做,只是设置了写入权限拒绝。就是这样——允许列中根本没有复选标记。这一次锁正常工作了。密钥仍然可以读取,但现在 Windows 不再能够潜入并重新填充。

相关内容