C语言 新创建用户的RegOpenCurrentUser(KEY_WRITE)



在我成功创建一个新用户,将用户添加到内置admins组后,我想编辑新创建的用户的注册表(这个程序是一个提升为admin的程序)。我调用了NetUserAdd(), NetLocalGroupAddMembers(), LogonUser(),然后,最后是LoadUserProfile(),所以用户目录存在。

请原谅这段草率的代码,但这是我在后面做的:

DuplicateTokenEx(hToken,TOKEN_ALL_ACCESS,&sa,SecurityImpersonation,TokenPrimary,&hNewToken);
ImpersonateLoggedOnUser(hNewToken);
HKEY hKey;
LSTATUS stat = RegOpenCurrentUser(KEY_READ|KEY_WRITE, &hKey);
// stat is 5 (ACCESS_DENIED) when KEY_WRITE is added, it
// returns 0 (ERROR_SUCCESS) when it's just KEY_READ
RegCloseKey(hKey);
RevertToSelf();
CloseHandle(hNewToken);

错误在RegOpenCurrentUser()行。当我要求写入该用户的香港大学注册表时,它出错了。如果我只使用KEY_READ

就可以了

这可能是我想要做的吗?用户的注册表单元是否已经创建?或者用户必须物理登录才能创建它?

最终我想做的是为新用户创建GPO

如果您已经用LoadUserProfile()加载了用户配置文件,那么您实际上根本不需要使用RegOpenCurrentUser()。您可以使用LoadUserProfile()返回的PROFILEINFOhProfile字段:

hProfile
类型:处理

HKEY_CURRENT_USER注册表子树的句柄。

当LoadUserProfile调用成功返回时,hProfile成员接收到一个注册表键句柄打开到用户子树的根,以完全访问(KEY_ALL_ACCESS)打开。

相关内容

  • 没有找到相关文章

最新更新