首页 > 解决方案 > 注册表使用 C# 以编程方式获取目录所有者

问题描述

我想使用 C# 以编程方式读取 Windows 注册表的目录(及其子目录)的所有者。

例如,假设我的注册表包含HKEY_CURRENT_USER\Software\Microsoft用户拥有的目录SYSTEMdir我打算如何使用它的代码示例(省略对子目录的递归)是:

string dir = @"HKEY_CURRENT_USER\Software\Microsoft";
string owner = ReadRegOwner(dir); // owner is "SYSTEM"

但是,我不确定如何ReadRegOwner在 C# 中实现。我已经找到了RegistrySecurity类,但我不确定如何使用它来获取注册表目录的所有者。它有GetOwner成员函数,但该函数需要一个类型的参数,Type我不确定要传递什么。

有谁知道如何实现这个?

标签: c#windowsenvironment-variablesregistry

解决方案


因此,实现可能如下所示:

string ReadRegOwner(string dir)
{
    RegistryKey key = Registry.CurrentUser.OpenSubKey(dir, false);
    RegistrySecurity rs = key.GetAccessControl();
    IdentityReference owner = rs.GetOwner(typeof(System.Security.Principal.NTAccount));

    return owner.ToString();
}

例子:

string dir = @"Software\Microsoft";
string owner = ReadRegOwner(dir); // Looks in HKEY_CURRENT_USER

当然,CurrentUser如果与所需的基本密钥不同,也可以替换HKEY_CURRENT_USER


推荐阅读