c++ - 使用 C++ 程序的新 GPO

标签 c++ impersonation group-policy gpo

我正在尝试使用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 新方法错误地恢复了在调用线程中完成的模拟。所以只有模拟没有发生。因此创建了一个具有完成任务所需凭据的新流程。

引用:https://shellexecute.wordpress.com/2008/11/18/igrouppolicyobjectnew-will-fail-if-thread-is-impersonating-or-identity-or-delegation/

关于c++ - 使用 C++ 程序的新 GPO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41799537/

相关文章:

windows - 有没有办法以编程方式将启动脚本添加到本地组策略?

c# - Web.config 导致 "blocked by group policy"错误

c++ - 如何通过套接字发送 wstring 变量?

c++ - 错误 LNK2001 : unresolved external symbol - when creating abstract class c++

vbscript - 使用多个签名由 GPO 自动生成 Outlook 签名

c# - 如何确定用户是否具有管理员权限?

c# - 在 Sharepoint 2013 (C#) 上以编程方式模拟用户

c++ - C/C++涉及2个进程时如何使用fake function framework?

c++ - 默认字符串流格式与 snprintf 的格式相同吗?

c# - 在 C# 上登录用户后注销