Как получить объект IADsUser для использования с API-интерфейсом Active Directory? - PullRequest
0 голосов
/ 19 ноября 2018

Как настроить входящий параметр pUser для передачи в эту функцию CheckUserGroups (IADsUser * pUser)?Я видел функцию в другом посте, но они не объяснили ее подробно: Необходимо получить все группы, к которым принадлежит пользователь ... в 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;
}

1 Ответ

0 голосов
/ 20 ноября 2018

Вот пример для создания и настройки 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...