如何从服务访问当前登录用户的 HKCU 注册表?

Ror*_*ory 5 .net c# registry pinvoke

在 Windows 服务中,我想检查存储在每个用户的 HKCU 注册表区域中的一些用户首选项。我怎样才能做到这一点?

我看到 HKEY_USERS 具有登录到机器的每个用户的子键(或类似的东西?),其中是每个用户的 HKCU 区域。但是,这些子项是用户的 SID,所以我需要计算出当前登录用户的 SID。

然后我会查询HKEY_USERS\<the users SID>\whichever\key\i\need来代替查询HKEY_CURRENT_USER\whichever\key\i\need

这个问题中,我可以以 DOMAIN\USER 格式获取机器上当前用户的列表。有没有办法从用户的 Windows 登录中获取用户的 SID?或者是否有更直接的方法来获取当前登录用户的 HKCU 注册表路径?

Jar*_*Par 1

为此,您需要执行以下操作之一

  1. 模拟用户凭据并从该模拟上下文访问 HKCU
  2. 直接从磁盘读取注册表文件(这会影响线程和数据完整性)。

我不是 100% 确定#1 会起作用,但我相信它会起作用。

对于任一解决方案,您都需要在流程中提供用户凭据或访问令牌。这并不容易实现,因为这是一个安全问题。

  • 不,我相信我可以以正常方式查询注册表,但使用密钥 KEY_USERS\&lt;用户 SID&gt;\... 而不是 HKCU\.... 我的服务作为本地系统运行,因此应该具有所有它需要的权限。所以我认为唯一的问题是确定当前登录用户的 SID。 (3认同)