Поделиться через


Функция ADsOpenObject (adshlp.h)

Функция ADsOpenObject привязывается к объекту ADSI, используя явные учетные данные пользователя и пароля. ADsOpenObject — это функция-оболочка для IADsOpenDSObject и эквивалентна методу IADsOpenDSObject::OpenDsObject .

Синтаксис

HRESULT ADsOpenObject(
  [in]  LPCWSTR lpszPathName,
  [in]  LPCWSTR lpszUserName,
  [in]  LPCWSTR lpszPassword,
  [in]  DWORD   dwReserved,
  [in]  REFIID  riid,
  [out] void    **ppObject
);

Параметры

[in] lpszPathName

Тип: LPCWSTR

Строка Юникода, заканчивающаяся null, которая указывает ADsPath объекта ADSI. Дополнительные сведения и примеры кода строк привязки для этого параметра см. в разделах LDAP ADsPath и WinNT ADsPath.

[in] lpszUserName

Тип: LPCWSTR

Строка Юникода, завершающаяся значением NULL, указывающая имя пользователя для предоставления службе каталогов для использования в учетных данных. Эта строка всегда должна быть в формате "<домен\><имя> пользователя", чтобы избежать неоднозначности. Например, если доменЫ А и ДоменB имеют отношение доверия и оба домена имеют пользователя с именем user1, невозможно предсказать, какой домен ADsOpenObject будет использовать для проверки "user1".

[in] lpszPassword

Тип: LPCWSTR

Строка Юникода, завершающаяся значением NULL, которая указывает пароль для предоставления службе каталогов для использования для учетных данных.

[in] dwReserved

Тип: DWORD

Флаги проверки подлинности для конкретного поставщика, используемые для определения параметров привязки. Дополнительные сведения см. в разделе ADS_AUTHENTICATION_ENUM.

[in] riid

Тип: REFIID

Идентификатор интерфейса для запрошенного интерфейса для этого объекта.

[out] ppObject

Тип: VOID**

Указатель на указатель на запрошенный интерфейс.

Возвращаемое значение

Тип: HRESULT

Этот метод поддерживает стандартные возвращаемые значения HRESULT , включая следующие.

Дополнительные сведения см. в разделе Коды ошибок ADSI.

Комментарии

Эту функцию не следует использовать только для проверки учетных данных пользователя.

Клиент C/C++ вызывает вспомогающую функцию ADsOpenObject для привязки к объекту ADSI, используя имя пользователя и пароль, предоставленные в качестве учетных данных для соответствующей службы каталогов. Если lpszUsername и lpszPassword имеют значение NULL и задано ADS_SECURE_AUTHENTICATION , ADSI привязывается к объекту с помощью контекста безопасности вызывающего потока, который является контекстом безопасности учетной записи пользователя, под которой выполняется приложение, или клиентской учетной записи пользователя, которую олицетворяет вызывающий поток.

Учетные данные, передаваемые в функцию ADsOpenObject , используются только с конкретным объектом, привязанным к и не влияют на контекст безопасности вызывающего потока. Это означает, что в приведенном ниже примере вызов ADsOpenObject будет использовать учетные данные, отличные от вызова ADsGetObject.

HRESULT hr;
IADs *padsRoot1;
IADs *padsRoot2;

hr = ADsOpenObject(L"LDAP://rootDSE",
    pwszUsername,
    pwszPassword,
    ADS_SECURE_AUTHENTICATION,
    IID_IADs,
    (LPVOID*)&padsRoot1);

hr = ADsGetObject(L"LDAP://rootDSE",
    IID_IADs,
    (LPVOID*)&padsRoot2);

Для работы с поставщиком WinNT: можно передать lpszUsername в качестве одной из следующих строк:

  • Имя учетной записи пользователя, то есть jeffsmith.
  • Имя пользователя в стиле Windows, то есть Fabrikam\jeffsmith.
С помощью поставщика LDAP для Active Directory можно передать lpszUsername в качестве одной из следующих строк:
  • Имя учетной записи пользователя, например jeffsmith. Чтобы использовать само имя пользователя, необходимо задать только флаг ADS_SECURE_AUTHENTICATION в параметре dwReserved .
  • Путь пользователя из предыдущей версии Windows, например Fabrikam\jeffsmith.
  • Различающееся имя, например "CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com". Чтобы использовать DN, параметр dwReserved должен быть равен нулю или должен содержать флаг ADS_USE_SSL .
  • Имя участника-пользователя (UPN), например "jeffsmith@Fabrikam.com". Чтобы использовать имя участника-пользователя, назначьте соответствующее значение имени участника-пользователя для атрибута userPrincipalName целевого объекта пользователя.
Если для успешного выполнения определенного запроса каталога с помощью поставщика LDAP требуется проверка подлинности Kerberos, строка привязки lpszPathName должна использовать бессерверный ADsPath, например "LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com", или использовать ADsPath с полным именем DNS-сервера, например "LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith, CN=admin,DC=Fabrikam,DC=com". Привязка к серверу с использованием неструктурированного NETBIOS-имени или короткого DNS-имени, например с использованием короткого имени "central3" вместо "central3.corp.Fabrikam.com", может привести к проверке подлинности Kerberos.

В следующем примере кода показано, как выполнить привязку к объекту службы каталогов с помощью запрошенных учетных данных пользователя.

IADs *pObject;
LPWSTR szUsername = NULL;
LPWSTR szPassword = NULL
HRESULT hr;

// Insert code to securely retrieve the user name and password.

hr = ADsOpenObject(L"LDAP://CN=Jeff,DC=Fabrikam,DC=com",
                   "jeffsmith",
                   "etercespot",
                   ADS_SECURE_AUTHENTICATION, 
                   IID_IADs,
                   (void**) &pObject);

Требования

Требование Значение
Минимальная версия клиента Windows Vista
Минимальная версия сервера Windows Server 2008
Целевая платформа Windows
Header adshlp.h
Библиотека Activeds.lib
DLL Activeds.dll

См. также раздел

Коды ошибок ADSI

Функции ADSI

ADsOpenObject и IADsOpenDSObject::OpenDsObject

Привязка

IADsOpenDSObject

IADsOpenDSObject::OpenDsObject