0

在我成功创建一个新用户后,将用户添加到内置管理员组,我想编辑新创建的用户的注册表(这个程序是一个提升的管理员程序)。我调用了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()在线。当我要求写入该用户的 HKU 注册表时,它会出错。如果我只使用它,它工作得很好KEY_READ

这甚至可能是我想要做的吗?用户的注册表配置单元是否已创建?还是用户必须亲自登录才能创建它?

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

4

1 回答 1

1

如果您已经加载了用户配置文件LoadUserProfile(),则根本不需要使用RegOpenCurrentUser()。您可以改为使用返回的hProfile字段:PROFILEINFOLoadUserProfile()

hProfile
类型:手柄

HKEY_CURRENT_USER 注册表子树的句柄。

...

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

于 2016-10-24T15:59:18.083 回答