我正在尝试使用IGrouppolicyobject 接口(interface)以编程方式创建 gpo
正在子域中运行该程序并能够在子域中成功创建 GPO。
要在父域中创建 GPO,我将模拟(使用 LogonUser 窗口功能)父域管理员凭据
(模拟成功,我在 LogonUser 方法中使用 LOGON32_LOGON_NEW_CREDENTIALS 模拟,甚至后续的 ImpersonateLoggedOnUser 方法也成功)
但是 gpo 创建调用(IGrouppolicyobject 的新方法)失败,访问被拒绝错误代码: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();
}
最佳答案
终于找到答案了。
似乎 IGroupPolicyObject
新方法错误地恢复了在调用线程中完成的模拟。所以只有模拟没有发生。因此创建了一个具有完成任务所需凭据的新流程。
关于c++ - 使用 C++ 程序的新 GPO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41799537/