繁体   English   中英

删除顽固的注册表项

[英]Delete stubborn registry key

描述

一个驱动程序在注册表中留下了混乱(即使是从系统中卸载它)。 如果我检查安全设置,它将不会在“组或用户名”中显示任何内容。 当我检查所有者时,它仅显示“无法显示当前所有者。”。 当我想删除注册表项时,我必须:

  1. 取得所有权。

  2. 添加组。

  3. 删除密钥。

问题是每个注册表都有几个子项,我必须在每个项上重复该过程。 继承权限选项在注册表编辑器中不起作用。 是的,我正在管理员模式下运行注册表编辑器。

问题

我想编写一个简单的C#代码,该代码将循环并删除所有键。 我找到了一些代码示例,但就我而言,任何OpenSubKey调用都将失败,并显示以下错误: System.Security.SecurityException:不允许请求的注册表访问。 如果任何OpenSubKey函数调用失败,如何更改所有权? 还有其他命令可以声明所有权然后删除注册表项吗?

谢谢你的支持

正如您知道要以管理员身份运行注册表编辑器以确保您具有修改/删除注册表项的适当特权一样,您需要对C#应用程序执行相同的操作。

因为您忘记了这样做,所以System.Security.SecurityException被抛出来作为提醒。 如异常消息所述,您没有权限修改/删除注册表项。

要解决该问题,必须使用管理特权执行C#应用程序。 您可以手动执行此操作,也可以将清单添加到您的应用程序中,这将导致它自动要求管理特权。

这是一半的答案。

知识库文章介绍了如何获取您无权访问的密钥的所有权。

简而言之,您需要启用“获取所有权”特权并使用WRITE_OWNER访问权限打开密钥。 然后,您可以设置所有者。

请注意,这仅在以管理员身份运行代码时有效。

但是,我不知道您是否可以使用内置函数在C#中执行此操作,或者是否需要使用interop来调用本机API。 如果是后者,使用C / C ++可能会更快。

或者,您可以使用SubInAcl工具。 它可以取得文件,注册表项等的所有权。

为了清楚起见,当您谈论在管理员模式下运行它时,请右键单击并以管理员身份运行-这是提升的特权,并且仅通过双击就不会发生。 即使您以管理员身份登录,也必须右键单击并以管理员身份运行才能提升权限。

我的问题是通过写给CURRENT_USER而不是LOCAL_MACHINE来解决的,现在我看到您的问题实际上并未通过提升和授予来解决。 您存储在注册表中的安全描述符可能已被AWOL驱动程序的垃圾写入或发生的任何事件破坏了。 这意味着您将无能为力,包括修复自己或新用户。

在我们清除权限问题之前,您可能也无法运行CCleaner。 但是,您可以进入安全模式并运行sfc / scannow和chkdsk-sfc修复了一个类似的问题,但是可能有风险,因此请自担风险,但是看起来很有希望,在尝试其他方法之前,我可能已经进行过scannow 。 安全模式+ SFC / SCANNOW

我会备份数据并尽快擦除它。 我确实找到了有关损坏的安全描述符的各种操作系统的说明-对于Win 8和7,因此您应该没有问题,并且看起来它们将需要安全模式

祝好运!

使用此查询并通过SQl删除它。

执行master..xp_regdeletevalue'hKey','Key Name','String Value'

谢谢

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM