成功创建新用户后,将用户添加到内置管理员组,我想编辑新创建的用户注册表(此程序是一个提升管理员程序)。我拨打了NetUserAdd()
,NetLocalGroupAddMembers()
,LogonUser()
,然后是LoadUserProfile()
,因此用户的目录已经存在。
请原谅邋code的代码,但这就是我之后正在做的事情:
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。
答案 0 :(得分:1)
如果您已将用户个人资料加载LoadUserProfile()
,则根本不需要使用RegOpenCurrentUser()
。您可以使用hProfile
返回PROFILEINFO
的LoadUserProfile()
字段:
hProfile
类型:手柄HKEY_CURRENT_USER注册表子树的句柄。
...
当LoadUserProfile调用成功返回时,hProfile成员会收到一个注册表键句柄,该句柄键打开到用户子树的根目录,以完全访问权限(KEY_ALL_ACCESS)打开。