c++ - 如何获取 IADsUser 对象以用于 Active Directory API?
问题描述
如何设置传入参数 pUser 以传递给此函数 CheckUserGroups(IADsUser *pUser)?我在另一篇文章中看到了函数,但他们没有详细解释:需要检索用户所属的所有组... in C++
请指教。
HRESULT CheckUserGroups(IADsUser *pUser)
{
IADsMembers *pGroups;
HRESULT hr = S_OK;
hr = pUser->Groups(&pGroups);
pUser->Release();
if (FAILED(hr)) return hr;
IUnknown *pUnk;
hr = pGroups->get__NewEnum(&pUnk);
if (FAILED(hr)) return hr;
pGroups->Release();
IEnumVARIANT *pEnum;
hr = pUnk->QueryInterface(IID_IEnumVARIANT,(void**)&pEnum);
if (FAILED(hr)) return hr;
pUnk->Release();
// Enumerate.
BSTR bstr;
VARIANT var;
IADs *pADs;
ULONG lFetch;
IDispatch *pDisp;
VariantInit(&var);
hr = pEnum->Next(1, &var, &lFetch);
while(hr == S_OK)
{
if (lFetch == 1)
{
pDisp = V_DISPATCH(&var);
pDisp->QueryInterface(IID_IADs, (void**)&pADs);
pADs->get_Name(&bstr);
printf("Group belonged: %S\n",bstr);
SysFreeString(bstr);
pADs->Release();
}
VariantClear(&var);
pDisp=NULL;
hr = pEnum->Next(1, &var, &lFetch);
};
hr = pEnum->Release();
return S_OK;
}
解决方案
这是一个创建和设置的示例IADsUser *pUser
(将“管理员”更改为您的用户名):
HRESULT hr = S_OK;
IADsUser *pUser;
_bstr_t bstr;
DWORD ll_len = 255;
char lbBuffer[255];
::GetComputerName(lbBuffer, &ll_len);
bstr = "WinNT://" + _bstr_t(lbBuffer) + "/" + _bstr_t("Administrator") + ",user";
hr = CoInitialize(NULL);
hr = ADsGetObject(bstr, IID_IADsUser, (void **)&pUser);
if (SUCCEEDED(hr))
{
hr = CheckUserGroups(pUser);
/*
hr = pUser->SetPassword(_bstr_t("123456"));
if (SUCCEEDED(hr))
{
CoUninitialize();
return TRUE;
}
*/
}
CoUninitialize();
对于 LDAP,您可以从本文档中的示例中获得帮助,更改ADsGetObject
.
推荐阅读
- javascript - Spring controller give bad request 400
- mysql - The Having statement does not work in my sql
- c++ - 如何使用不同的计算操作来获得 C++ 中两个数字的结果?
- c++ - C++ 生成器和 TinyXML2
- python - For循环函数没有返回正确的输出
- java - Spring Boot Web 应用程序给出 500 内部服务器错误,而不是 404 未找到
- struct - 如何为我的结构实现 FromIterator 特征?
- reactjs - 反应中功能组件内的导出功能
- directory - 自动为某个文件夹中的新文件夹创建子文件夹
- google-analytics - GA4 中的登录状态跟踪