gpt4 book ai didi

c++ - 在 C++ 中使用 setInfo() 会导致 E_ADS_INVALID_USER_OBJECT

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:24 25 4
gpt4 key购买 nike

我正在尝试使用 C++ 中的 setInfo() 函数对 Windows AD 中用户的 e-mail 字段进行一些更改。我正在制作一个导出到 Windows 服务的 DLL。但是 setInfo() 不断返回:

E_ADS_INVALID_USER_OBJECT

如果我将完全相同的代码编译成 EXE 并在命令行中运行它,一切正常。但是当导出DLL 并调用setInfo() 时,它会返回上述错误。这是我的代码的一部分:

IADsUser *pUser = NULL;
RESULT hr = CoInitialize(0);
VARIANT var;
hr = ADsGetObject(L"LDAP://CN=Foo Bar,CN=Users,DC=mydomain,DC=com", IID_IADsUser, (void**) &pUser);
//hr = ADsOpenObject(L"LDAP://CN=Foo Bar,CN=Users,DC=mydomain,DC=com", NULL, NULL, ADS_SECURE_AUTHENTICATION, IID_IADsUser, (void**) &pUser);

VariantInit(&var);
V_BSTR(&var) = SysAllocString(L"foobar@email.com");
V_VT(&var) = VT_BSTR;
hr = pUser->Put(CComBSTR("mail"), var);
hr = pUser->SetInfo();

我能够成功地与 LDAP 绑定(bind),绑定(bind)也适用于此:

ADsOpenObject()

当我在 ADsOpenObject 中添加域管理员凭据时,setInfo() 有效..但我不想为此使用用户名/密码。有没有办法在 DLL 中使用 setInfo() 而无需在代码中提供凭据?

此外,IADsUser Get 功能无需提供域管理员的凭据即可工作。这是一个读/写问题吗?感谢您的帮助!

最佳答案

如果您在绑定(bind)到 AD 时未明确提供用户名和密码,Windows 将使用进程的安全上下文进行登录。对于作为本地系统或网络服务运行的服务,这意味着它登录使用计算机的 AD 帐户。

如果您更改 AD 中的权限以授予对计算机帐户的必要访问权限,它将起作用。 (计算机帐户的用户名是附加美元符号的计算机名称。)

关于c++ - 在 C++ 中使用 setInfo() 会导致 E_ADS_INVALID_USER_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27586244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com