【问题标题】:Updating HKEY_CURRENT_USER hive from a service从服务更新 HKEY_CURRENT_USER 配置单元
【发布时间】:2011-11-18 12:00:52
【问题描述】:

我正在编写一个网络提供商 (Windows 7) 来捕获域名和用户名,我必须将其保存在 HKEY_CURRENT_USER\Software\MyApp\Profile 中

由于网络提供商作为服务运行,因此数据存储在 HKEY_USER\.Default\Software\MyApp\Profile 中

成功登录后,如果我尝试从我的应用程序中读取数据,它会真正尝试从该用户的 HKEY_CURRENT_USER 中读取数据,而 HKEY_CURRENT_USER 将没有任何内容。

这一般是如何管理的?我应该如何将数据从服务存储到当前用户配置单元中。

【问题讨论】:

  • 你有服务和网络提供者dll吗?

标签: windows-7 registry winlogon


【解决方案1】:

您需要获取一个用户令牌(调用OpenProcess,然后调用OpenProcessToken),使用该令牌模拟您的线程并使用RegOpenCurrentUser 函数打开用户注册表配置单元。

你也可以找到用户SID并打开HKEY_USER\<SID>

【讨论】:

  • 我一直在尝试执行 LogonUser、LoadUserProfile、ImpersonateLoggedOnUser 但是当我尝试加载用户配置文件时出现 Permission denied 错误。如何获取用户 SID?
  • 如何找到正确的 processId 以在 OpenProcess 中提及?这我必须在网络提供商中弄清楚,(在 NPLogonNotify 函数内)
  • 在服务中,您可以监控会话事件 (SERVICE_CONTROL_SESSIONCHANGE) 并使用用户会话 ID 调用 WTSQueryUserToken。
【解决方案2】:

我已经设法完成了。

我做了一个 LogonUser、LoadUserProfile 和 ImpersonateLoggedOnuser。 LoadUserProfile 将返回 PROFILEINFO 结构。 PROFILEINFO 的成员 hProfile 是应该使用的实际 HKCU 根。

调用 LogonUser 将递归触发网络提供商,以阻止您必须从 NPLogonNotify 参数中检查 lpStationName,如果它的“SvcVtl”则中断递归。有关 NPLogonNotify 的更多详细信息,请查找 msdn 文档。

当所有注册表操作完成后,调用 UnLoadUserProfile、RevertoToSelf、closeHandle(token)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-26
    • 2018-02-22
    • 1970-01-01
    • 2020-06-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多