c# - 注册表使用 C# 以编程方式获取目录所有者
问题描述
我想使用 C# 以编程方式读取 Windows 注册表的目录(及其子目录)的所有者。
例如,假设我的注册表包含HKEY_CURRENT_USER\Software\Microsoft
用户拥有的目录SYSTEM
。dir
我打算如何使用它的代码示例(省略对子目录的递归)是:
string dir = @"HKEY_CURRENT_USER\Software\Microsoft";
string owner = ReadRegOwner(dir); // owner is "SYSTEM"
但是,我不确定如何ReadRegOwner
在 C# 中实现。我已经找到了RegistrySecurity类,但我不确定如何使用它来获取注册表目录的所有者。它有GetOwner
成员函数,但该函数需要一个类型的参数,Type
我不确定要传递什么。
有谁知道如何实现这个?
解决方案
因此,实现可能如下所示:
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
。
推荐阅读
- python - 使用 pandas melt 将列表传递给 value_vars 的正确方法
- c# - 是否可以从基类中获取实际的类类型?
- ruby-on-rails - Rails 文件不会更新,除非服务器重新启动
- c# - 如何从 C# 中的字符串打开表单?
- postgresql - 使用 Postgresql 和 Flask-SQLAlchemy 提高 COUNT(*) WHERE 的数据库性能
- c# - 如何忽略所有敏感或缓存文件以使用 Rider 进行 dotnet 核心开发?
- python - 在for循环中访问相应元组中的元素
- user-interface - Blender - 使用 bpy 插入一行文本
- redis - 具有不同持久性的多个 Redis 客户端?
- reactjs - stackblitz 找不到包 ....当 pkg 名称被错误地大写时,stackblitz 到底想做什么