Binden mit GetObject und ADsGetObject
Die Funktionen GetObject und ADsGetObject werden verwendet, um ohne Authentifizierung an Verzeichnisdienstobjekte zu binden. Die Anwendung muss beim Zugriff auf Verzeichnisdienstdaten keine Anmeldeinformationen angeben. ADSI verwendet den Sicherheitskontext des aufrufenden Threads. Wenn bei der sicheren Authentifizierung jedoch ein Fehler auftritt, versucht ADSI, eine einfache Bindung mit einem NULL-Benutzernamen und NULL-Kennwort durchzuführen. Wenn die einfache Bindung erfolgreich ist, ist der Benutzerkontext für die Bindung Gast. Eine einfache Bindung verwendet die Klartextauthentifizierung. Da kein Benutzername oder Kennwort über das Netzwerk übertragen wird, ist dies kein Sicherheitsproblem.
Die GetObject-Funktion wird zum Binden an Verzeichnisdienstobjekte in Sprachen verwendet, die Automatisierung unterstützen, z. B. Visual Basic. Die GetObject-Funktion erfordert eine Monikerzeichenfolge. In ADSI ist die Bindungszeichenfolge die Monikerzeichenfolge.
In Sprachen, die die Automatisierung nicht direkt unterstützen, z. B. C oder C++, stellt ADSI die ADsGetObject-Funktion zum Binden an Verzeichnisdienstobjekte zur Verfügung. Alternativ können die Funktionen MkParseDisplayName und MkParseDisplayNameEx verwendet werden, um das gleiche Ergebnis wie GetObject zu erzielen.
Bei einem Dienst, der unter dem LocalSystem-Konto ausgeführt wird, hängt der von GetObject und ADsGetObject verwendete Sicherheitskontext von dem Computer ab, auf dem der Dienst ausgeführt wird. Wenn der Dienst auf einem Domänencontroller als LocalSystem ausgeführt wird, verfügt der Dienst über vollständigen Zugriff auf Active Directory auf Systemebene. Wenn der Dienst nicht auf einem Domänencontroller ausgeführt wird, verfügt der Dienst über die Zugriffsrechte und Berechtigungen, die dem Computerkonto für den Computer gewährt werden, auf dem der Dienst ausgeführt wird. dies ist deutlich weniger leistungsfähig als der Zugriff auf Systemebene.
Beispiele
Im folgenden Visual Basic Codebeispiel wird gezeigt, wie die GetObject-Funktion zum Binden an ein Objekt verwendet wird.
Dim myUser as IADs
Set myUser = GetObject("LDAP://CN=jeffsmith,DC=fabrikam,DC=com")
Das folgende C++-Codebeispiel zeigt, wie die ADsGetObject-Funktion zum Binden an ein Objekt verwendet wird.
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();