gpt4 book ai didi

c# - 通过 C# 从注册表中的 'Deny' 项中删除一条 'UserChoice' 规则(权限)

转载 作者:行者123 更新时间:2023-11-30 12:35:10 28 4
gpt4 key购买 nike

我正在研究文件关联。我已经确定在以下位置有一个名为 UserChoice 的键:

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\[ext].

我已经能够读取和写入 UserChoice 键,前提是创建了它并且它没有已经创建通过 Windows。但是,如果 Windows 已经创建了 UserChoice,那么我需要以管理员身份运行才能访问该键。我的最终目标是删除 UserChoice 键。

我注意到 Windows 在 UserChoice 键上设置了一个Deny 规则,这会阻止我删除该键。如果我能成功删除该规则,我相信我将能够删除 UserChoice 键。这是我试过的代码:

public static void ShowSecurity(RegistryKey regKeyRoot, string user) {
RegistrySecurity security = regKeyRoot.GetAccessControl(AccessControlSections.All);

foreach (RegistryAccessRule ar in
security.GetAccessRules(true, true, typeof(NTAccount))) {

if (ar.IdentityReference.Value.Contains(User) &&
ar.AccessControlType.ToString().ToLower() == "deny") {

security.RemoveAccessRuleSpecific(ar);
regKeyRoot.SetAccessControl(security);
}
}
}

当 Windows 创建 UserChoice 键时,它会为类型为 Deny 的当前用户添加安全规则;权限:特殊。此规则不会被继承,仅适用于 UserChoice 键。

通过一些乱七八糟的操作并以管理员身份运行,我能够访问该 RegistryAccessRule。但是,即使以管理员身份运行,我也无法删除此规则。我在研究的某个地方读到,没有一种编程方式可以做到这一点。我可以通过 RegEdit 删除这条规则。我还可以使用 NirSoft 的文件类型管理器删除 UserChoice 键。所以我假设有一些方法可以做到这一点。

总结:有没有一种方法可以删除拒绝规则,以便删除 UserChoice 键?

最佳答案

您的代码示例和 answer 中建议的修改@ali 引导我找到一个解决方案来克服 Windows 在 UserChoice 键上的安全设置,这使我能够删除该键。

我的解决方案假定 UserChoice 键存在于 HKEY_CURRENT_USER (HKCU) 配置单元中。如果是这种情况,则用户拥有 UserChoice key ,因此具有更改该 key 的安全设置并最终将其删除的必要权限。 (这意味着用户不需要是 Administrators 组的成员。)

该方法的extensionKey参数是UserChoice键的父键。

static void DeleteUserChoiceKey(RegistryKey extensionKey)
{
const string userChoiceKeyName = "UserChoice";

using (RegistryKey userChoiceKey =
extensionKey.OpenSubKey(userChoiceKeyName,
RegistryKeyPermissionCheck.ReadWriteSubTree,
RegistryRights.ChangePermissions))
{
if (userChoiceKey == null) { return; }
string userName = WindowsIdentity.GetCurrent().Name;
RegistrySecurity security = userChoiceKey.GetAccessControl();

AuthorizationRuleCollection accRules =
security.GetAccessRules(true, true, typeof(NTAccount));

foreach (RegistryAccessRule ar in accRules)
{
if (ar.IdentityReference.Value == userName &&
ar.AccessControlType == AccessControlType.Deny)
{
security.RemoveAccessRuleSpecific(ar); // remove the 'Deny' permission
}
}

userChoiceKey.SetAccessControl(security); // restore all original permissions
// *except* for the 'Deny' permission
}

extensionKey.DeleteSubKeyTree(userChoiceKeyName, true);
}

关于c# - 通过 C# 从注册表中的 'Deny' 项中删除一条 'UserChoice' 规则(权限),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6108128/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com