ADsOpenObject 函数 (adshlp.h)

ADsOpenObject 函数使用显式用户名和密码凭据绑定到 ADSI 对象。ADsOpenObjectIADsOpenDSObject 的包装函数,等效于 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 结尾的 Unicode 字符串,指定 ADSI 对象的 ADsPath。 有关此参数绑定字符串的详细信息和代码示例,请参阅 LDAP ADsPathWinNT ADsPath

[in] lpszUserName

类型: LPCWSTR

以 null 结尾的 Unicode 字符串,指定要提供给目录服务以用于凭据的用户名。 此字符串应始终采用“<domain\><user name>”格式,以避免歧义。 例如,如果 DomainA 和 DomainB 具有信任关系,并且两个域都有一个名称为“user1”的用户,则无法预测哪个域 ADsOpenObject 将用于验证“user1”。

[in] lpszPassword

类型: LPCWSTR

以 null 结尾的 Unicode 字符串,指定要提供给目录服务以用于凭据的密码。

[in] dwReserved

类型:DWORD

用于定义绑定选项的特定于提供程序的身份验证标志。 有关详细信息,请参阅 ADS_AUTHENTICATION_ENUM

[in] riid

类型: REFIID

此对象上请求的接口的接口标识符。

[out] ppObject

类型: VOID**

指向指向所请求接口的指针的指针。

返回值

类型: HRESULT

此方法支持标准 HRESULT 返回值,包括以下内容。

有关详细信息,请参阅 ADSI 错误代码

注解

此函数不应仅用于验证用户凭据。

C/C++ 客户端调用 ADsOpenObject 帮助程序函数,以使用作为相应目录服务的凭据提供的用户名和密码绑定到 ADSI 对象。 如果 lpszUsernamelpszPasswordNULL设置了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”。
使用 Active Directory 的 LDAP 提供程序,可以将 lpszUsername 作为以下字符串之一传入:
  • 用户帐户的名称,例如“jeffsmith”。 若要单独使用用户名,必须在 dwReserved 参数中仅设置 ADS_SECURE_AUTHENTICATION 标志。
  • 以前版本的 Windows 的用户路径,例如“Fabrikam\jeffsmith”。
  • 可分辨名称,例如“CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com”。 若要使用 DN,dwReserved 参数必须为零,或者必须包含 ADS_USE_SSL 标志。
  • 用户主体名称 (UPN) ,例如“jeffsmith@Fabrikam.com”。 若要使用 UPN,请为目标用户对象的 userPrincipalName 属性分配相应的 UPN 值。
如果使用 LDAP 提供程序成功完成特定目录请求需要 Kerberos 身份验证, 则 lpszPathName 绑定字符串必须使用无服务器 ADsPath,例如“LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com”,或者必须使用具有完全限定 DNS 服务器名称的 ADsPath,例如“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
标头 adshlp.h
Library Activeds.lib
DLL Activeds.dll

另请参阅

ADSI 错误代码

ADSI 函数

ADsOpenObject 和 IADsOpenDSObject::OpenDsObject

Binding

IADsOpenDSObject

IADsOpenDSObject::OpenDsObject