【发布时间】:2017-06-07 13:27:27
【问题描述】:
我正在尝试使用 IGrouppolicyobject 接口以编程方式创建 gpo
正在子域中运行程序,并且能够在子域中成功创建 GPO。
要在父域中创建 GPO,我将模拟(使用 LogonUser windows 功能)父域管理员凭据
(模拟成功,我在LogonUser方法中使用LOGON32_LOGON_NEW_CREDENTIALS进行模拟,甚至后续的ImpersonateLoggedOnUser方法也成功)
但是 gpo 创建调用(IGrouppolicyobject 的 New 方法)失败,并出现 Access Denied 错误代码:80070005
请指导我。
这是代码..
HANDLE tokHandle = NULL;
BOOL chk = LogonUser("parent domain admin name", "parent domain name", "password", LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &tokHandle);
if(chk) {
chk = ImpersonateLoggedOnUser(tokHandle);
if(!chk)
{
//print error code in log
}
CloseHandle(tokHandle);
}
else
{
//print error code in log
}
if(chk) {
IGroupPolicyObject* gpo = NULL;
HRESULT hr = CoCreateInstance(CLSID_GroupPolicyObject, NULL, CLSCTX_INPROC_SERVER, IID_IGroupPolicyObject, (LPVOID*)&gpo);
if (hr==S_OK) {
hr = gpo->New(L"LDAP://dcname/DC=domain,DC=com", L"gponame", GPO_OPEN_READ_ONLY);
if(hr!=0) {
print hr; //ACCESS DENIED ERROR CODE COMES HERE...
}
} else {
//print error code in log
}
if(gpo) gpo->Release();
RevertToSelf();
}
【问题讨论】:
-
你的代码在哪里?见How to Ask。
-
更新了有问题的代码
-
谢谢,我根据我在代码中很快注意到的内容发布了一个答案。有时会看到某些变量未更新,不确定您是否是这种情况,但如果是,这将是一个简单的修复,只需与您的 Active Directory 管理员确认即可。
-
嗨,Heron,我希望这个问题与变量更新无关。代码正在努力在子域中创建 gpo。
标签: c++ impersonation group-policy gpo