使用 GetObject 和 ADsGetObject 进行绑定
GetObject 和 ADsGetObject 函数可用于绑定到不带身份验证的目录服务对象。 访问目录服务数据时,应用程序无需提供凭据。 ADSI 使用调用线程的安全上下文。 但是,如果安全的身份验证失败,ADSI 则会尝试使用 null 用户名和密码来执行简易绑定。 如果简易绑定成功,此绑定的用户上下文则为 Guest。 简易绑定使用纯文本身份验证。 由于不会通过网络传输用户名或密码,因此这不会构成安全问题。
GetObject 函数可用于以支持自动化的语言(如 Visual Basic)绑定到目录服务对象。 GetObject 函数需要名字对象字符串。 在 ADSI 中,该绑定字符串为名字对象字符串。
在不支持直接支持自动化的语言(如 C 或 C++)中,ADSI 提供 ADsGetObject 函数以绑定到目录服务对象。 或者,MkParseDisplayName 和 MkParseDisplayNameEx 函数可用于实现与 GetObject 相同的结果。
对于在 LocalSystem 帐户下运行的服务,GetObject 和 ADsGetObject 使用的安全上下文取决于运行该服务的计算机。 如果此服务在域控制器上作为 LocalSystem 运行,则该服务具有对 Active Directory 的完整系统级访问权限。 如果此服务未在 DC 上运行,则该服务具有向运行此服务的计算机的计算机帐户授予的访问权限和特权,而其功能大大低于系统级访问权限。
示例
以下 Visual Basic 代码示例演示了如何使用 GetObject 函数绑定到对象。
Dim myUser as IADs
Set myUser = GetObject("LDAP://CN=jeffsmith,DC=fabrikam,DC=com")
以下 C++ 代码示例演示了如何使用 ADsGetObject 函数绑定到对象。
IADs *pObject;
HRESULT hr;
// Initialize COM.
CoInitialize(NULL);
hr = ADsGetObject(L"LDAP://CN=jeffsmith,DC=fabrikam,DC=com",
IID_IADs,
(void**) &pObject);
if(SUCCEEDED(hr))
{
// Use the object.
// Release the object.
pObject->Release()
}
// Uninitialize COM.
CoUninitialize();