C# 访问另一个用户的注册表

2024-03-23

我当前使用的 Windows 服务有问题。基本上,我将一些值存储在HKCU注册表(来自以管理员身份运行的 GUI 工具),并从该 GUI 中启动一项服务。该服务使用SYSTEM帐户来运行,我相信这是我的问题 - 我无法访问服务中使用 GUI 工具存储的注册表项,因为它指向不同的HKCU!

我怎么能够“重定向”使用的服务HKCU存储它的用户的? (实际上我可以将用户名传递给服务或SID如果有人告诉我如何在 GUI 中检索它,但我不知道应该使用什么"change"用户指出正确的)

EDIT 1:

我使用静态类来访问注册表,GUI 和服务都使用它,检索基本密钥的函数是(rootKey是保存子项名称的字符串变量):

private static RegistryKey GetBaseKey(bool writable = false)
{
    try
    {
        RegistryKey reg = RegistryKey.OpenBaseKey(RegistryHive.CurrentUser, RegistryView.Registry64);
        RegistryKey rk = reg?.OpenSubKey("SOFTWARE", writable)?.OpenSubKey(rootKey, writable);

        return rk;
    }
    catch (Exception ex)
    {
        // handle exceptions later
    }

    return null;
}

我已经发现WindowsIdentity可以提供句柄的类(AccessToken)对于当前用户,我是否应该将其作为参数传递给我的服务并使用此句柄来模拟服务内部?

EDIT 2:

我做了一些事情,但没有用。我尝试过的:

CurrentUserToken = WindowsIdentity.GetCurrent().Token; // to get current identity token

然后与ServiceController.Start我添加了CurrentUserToken.ToString()作为一个论点。在我的服务中我初始化了RegistryUserToken (IntPtr)使用传递的值,我陷入困境:

WindowsIdentity RegUser = new WindowsIdentity(RegistryUserToken)

抛出异常:

模拟令牌无效 - 无法复制

我尝试了同样的方法AccessToken当前实例的WindowsIdentity- 抛出相同的异常。

我可以走那条路吗?或者我应该尝试一些不同的东西?


我可以给您两个选择:如果您有该用户的凭据,则模拟该用户,或者使用 HKCU 是 HKEY_USERS 下的键之一的符号链接的想法。 对于冒充你可以看到这个链接 http://www.codeproject.com/Articles/4051/Windows-Impersonation-using-C。 如果您知道该用户的 SID,那么您可以在那里找到它。您可以这样获取 SID:

var account = new NTAccount("usernameThatYouNeed");
var identifier = (SecurityIdentifier)account.Translate(typeof(SecurityIdentifier));
var sid = identifier.Value;

我更喜欢模仿。第二个选项适用于您不知道该用户的凭据的情况。 我不喜欢第二个选项,因为它需要管理权限才能写入其他人的帐户。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 访问另一个用户的注册表 的相关文章

随机推荐

  • 将列从 NVARCHAR 更改为 BINARY

    我不小心创建了一个类型错误的列NVARCHAR 用于存储密码盐 我想将其转换为NVARBINARY I tried ALTER TABLE dbo TableName ALTER COLUMN ColumnName varbinary 20
  • 如何在golang中将unicode(例如:\u2713)代码转换为rune(例如:✓)?

    code var checkMark u2713 stand for rune 以及如何将unicode u2713 转换为符文 并打印它 有谁可以帮助我 非常感谢 就好像你有一个像 u2713 u2715 这样的字符串 在操场上看http
  • 使用 IPython 逐步调试

    据我了解 Python 中有两种调试代码的方法 使用传统的调试器 例如pdb or ipdb 这支持诸如c for continue n for step over s for step into等 但您无法直接访问 IPython she
  • 错误:运算符不存在:数字 ~* 未知

    我需要创建domainPostgreSQL 中的价格 价格必须是NUMERIC 9 2 其中 9 是精度 2 小数位数 尝试创建域时获取 ERROR operator does not exist numeric unknown Hint
  • 使用 PHP 显示外部 Web 根文件夹中的所有图像

    我想显示存储在我的网络根文件夹之外的所有图像 请帮我 我只能重复显示一张图像 例如 如果我的文件夹中有 5 张图像 则只有一张图像在我的浏览器上显示 5 次 请帮我解决这个问题 我已经研究这个问题一个多月了 我是新手 帮助 谢谢 这是我正在
  • 根据点值更改瀑布图颜色

    我想根据图表值更改瀑布图的颜色 例如 如果值为负 则设置红色 如果值为正 则设置绿色 我从下面得到了代码excel vba根据点值更改数据点的条形图颜色 https stackoverflow com questions 13849488
  • 将 RGB PNG 转换为 CMYK JPEG(使用 ICC 颜色配置文件)

    我需要将 PNG 文件转换为 CMYK JPEG 在我的研究过程中 我发现了多篇关于 SO 的文章描述了这个问题 我已经复制了这个答案 https stackoverflow com questions 380678 how to set
  • 如何使用纯 CSS 在 HTML 中获取一棵树

    我正在尝试遵循这个tutorial http odyniec net articles turning lists into trees 这是my code https github com gurjeet CSSTree so far 本
  • python 使用 for 循环将用户输入添加到空列表中

    所以我想使用此代码将用户输入添加到空列表中 no of num int input enter the number of numbers you would like to add n this will store the number
  • 在经典ASP页面调用存储过程

    我一整天都在努力从经典 ASP 页面调用存储过程 我有一些基本的菜鸟问题 首先 这是向我的命令添加参数的最佳方法吗 cmd Parameters Append cmd CreateParameter SubmissionDate adDBT
  • 如何使用 cmp 将排序从 python 2 转换为 python 3?

    我正在尝试将用 python 2 编写的代码转换为 python 3 nums 30 31 num sort cmp lambda x y cmp y x x y 不知道如何在 python 3 中做到这一点 因为 cmp 被删除了 我相信
  • 测试 Dart 值是否实际上是一个函数?

    是否可以测试一个值是否是一个可以调用的函数 我可以轻松测试 null 但之后我不知道如何确保传入的参数实际上是一个函数 void myMethod funcParam if funcParam null How to test if fun
  • 检查 VSTS 中以前的构建信息(VSTS API)

    在执行 VSTS 构建期间是否可以访问以前的构建变量 例如 我可以获得先前构建的 Build SourceVersion 或 Build QueuedBy 吗 我可以通过 Build SourceVersion 等构建变量获取当前构建信息
  • 使用 LDAP 用户名作为实体名称

    我正在使用 Hashicorp Vault 1 9 0 并且启用了 LDAP 身份验证方法 该方法按预期正常工作 但有一个问题 LDAP 是我们独特的身份验证方法 当然 除了令牌之外 并且 LDAP 用户不是提前在 Vault 中创建的 因
  • 在 PHP 中搜索并获得双重结果

    这是我的 PHP 代码 我用它从 PHPMyAdmin 的数据库 Mysql 中进行搜索 但是当我得到结果时 它显示双倍 我不明白为什么是双的 如果它是 for foreach 循环 那么我将使用什么来代替它 请帮我解决代码
  • Python (CherryPy) Web 应用程序部署在本地,但在 Intranet 上不可见

    我使用 CherryPy 创建了一个 Python Web 应用程序 并部署在我的本地计算机上 当我尝试从家里的另一台计算机上查看它时 没有任何结果 但是 如果我创建一个简单的 html 文件 并使用以下命令部署它 python m Sim
  • 如何将 SAP .txt 提取转换为 .csv 文件

    我有一个 txt 文件 如下面报告的示例所示 我想将其转换为 csv 表 但我没有取得太大成功 Mack3 Line Item Journal Time 14 22 33 Date 03 10 2015 Panteni Ledger 1L
  • Jquery随机单词不重复

    我需要在 div 中显示随机单词而不重复该单词 随机单词将每隔随机秒 3 5 秒 附加一个 div 如果数组中的所有值都显示在 div 中 则会发出警报 例子 b a c d ALERT DONE Not b a b c d d a a c
  • 无法聚焦 Web 元素来发送密钥

    我有一组测试 需要登录然后执行搜索 我的应用程序是 Angular JS 我正在起诉 Protractor 事实上 我的测试工作正常 直到我收到我的应用程序的新套件 并且此时我的所有测试都失败了 element by id mainGlob
  • C# 访问另一个用户的注册表

    我当前使用的 Windows 服务有问题 基本上 我将一些值存储在HKCU注册表 来自以管理员身份运行的 GUI 工具 并从该 GUI 中启动一项服务 该服务使用SYSTEM帐户来运行 我相信这是我的问题 我无法访问服务中使用 GUI 工具