Привязка с помощью GetObject и ADsGetObject
Функции GetObject и ADsGetObject используются для привязки к объектам службы каталогов без проверки подлинности. Приложению не требуется предоставлять учетные данные при доступе к данным службы каталогов. ADSI использует контекст безопасности вызывающего потока. Однако если безопасная проверка подлинности завершается ошибкой, ADSI пытается выполнить простую привязку с именем пользователя NULL и паролем NULL. Если простая привязка выполнена успешно, контекст пользователя для привязки является гостевым. Простая привязка использует проверку подлинности с открытым текстом. Так как имя пользователя или пароль не передаются по сети, это не проблема безопасности.
Функция GetObject используется для привязки к объектам службы каталогов на языках, поддерживающих автоматизацию, например Visual Basic. Для функции GetObject требуется моникерная строка. В ADSI строка привязки — это моникерная строка.
На языках, которые напрямую не поддерживают автоматизацию, например C или C++, ADSI предоставляет функцию ADsGetObject для привязки к объектам службы каталогов. Кроме того, функции MkParseDisplayName и MkParseDisplayNameEx можно использовать для достижения того же результата, что и GetObject.
Для службы, работающей под учетной записью LocalSystem, контекст безопасности, используемый GetObject и ADsGetObject, зависит от компьютера, на котором выполняется служба. Если служба выполняется как LocalSystem на контроллере домена, служба имеет полный системный доступ к Active Directory. Если служба не запущена на контроллере домена, служба имеет права доступа и привилегии, предоставленные учетной записи компьютера для компьютера, на котором работает служба; это значительно меньше, чем доступ на уровне системы.
Примеры
В следующем примере кода 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();