Windows 7 从服务更新HKEY_当前_用户配置单元

Windows 7 从服务更新HKEY_当前_用户配置单元,windows-7,registry,winlogon,Windows 7,Registry,Winlogon,我正在编写一个网络提供商(Windows 7)来捕获域名和用户名,我必须将其保存在HKEY_CURRENT_USER\Software\MyApp\Profile中 由于网络提供商是作为服务运行的,因此数据存储在HKEY_USER\.Default\Software\MyApp\Profile中 成功登录后,如果我尝试从我的应用程序中读取数据,它会真正尝试从该用户的HKEY_当前用户中读取数据,但该用户没有任何数据 一般来说,这是如何管理的?如何将数据从服务存储到当前用户配置单元中。您需要获取一

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

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

成功登录后,如果我尝试从我的应用程序中读取数据,它会真正尝试从该用户的HKEY_当前用户中读取数据,但该用户没有任何数据


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

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


您还可以找到用户SID并打开
HKEY\U user\

我已经设法完成了这项工作

我做了LogonUser、LoadUserProfile和ImpersonalLoggeDonUser。LoadUserProfile将返回PROFILEINFO结构。PROFILEINFO的成员hProfile是应使用的实际HKCU根目录

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


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

我一直在尝试执行LogonUser、LoadUserProfile、ImpersonalLoggeDonUser,但在尝试加载用户配置文件时,我遇到了权限拒绝错误。如何获取用户SID?如何定位OpenProcess中要提到的正确processId?这一点我必须在网络提供程序(在NPLogonNotify函数中)中弄清楚,在服务中,您可以监视会话事件(服务控制会话更改)并使用用户会话id调用WTSQueryUserToken。您有服务和网络提供程序dll吗?