使用 C++ 程序的新 GPO
New GPO using c++ program
我正在尝试使用 IGrouppolicyobject 接口
以编程方式创建 gpo
是 运行 子域中的程序并且能够在子域中成功创建 GPO。
要在父域中创建 GPO,我正在模拟(使用 LogonUser windows 函数)父域管理员凭据
(模拟成功,我在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
新方法错误地恢复了在调用线程中完成的模拟。所以只有模拟没有发生。因此使用完成我的任务所需的凭据创建了一个新进程。
我正在尝试使用 IGrouppolicyobject 接口
以编程方式创建 gpo是 运行 子域中的程序并且能够在子域中成功创建 GPO。
要在父域中创建 GPO,我正在模拟(使用 LogonUser windows 函数)父域管理员凭据
(模拟成功,我在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
新方法错误地恢复了在调用线程中完成的模拟。所以只有模拟没有发生。因此使用完成我的任务所需的凭据创建了一个新进程。