IADsOpenDSObject::OpenDSObject-Methode (iads.h)

Die IADsOpenDSObject::OpenDSObject-Methode bindet unter Verwendung der angegebenen Anmeldeinformationen an ein ADSI-Objekt und ruft einen IDispatch-Zeiger auf das angegebene Objekt ab.

Wichtig Es wird nicht empfohlen, diese Methode mit dem WinNT-Anbieter zu verwenden. Weitere Informationen finden Sie im KB-Artikel 218497 , Benutzerauthentifizierungsprobleme mit dem WinNT-Anbieter für Active Directory-Dienstschnittstellen.
 

Syntax

HRESULT OpenDSObject(
  [in]  BSTR      lpszDNName,
  [in]  BSTR      lpszUserName,
  [in]  BSTR      lpszPassword,
  [in]  long      lnReserved,
  [out] IDispatch **ppOleDsObj
);

Parameter

[in] lpszDNName

Die mit Null beendete Unicode-Zeichenfolge, die den ADsPath des ADSI-Objekts angibt. Weitere Informationen und Beispiele für Bindungszeichenfolgen für diesen Parameter finden Sie unter LDAP ADsPath. Wenn Sie den LDAP-Anbieter mit einem ADsPath verwenden, der einen bestimmten Servernamen enthält, sollte der lnReserved-Parameter das flag ADS_SERVER_BIND enthalten.

[in] lpszUserName

Die mit Null beendete Unicode-Zeichenfolge, die den Benutzernamen angibt, der zum Sichern der Berechtigung vom Namespaceserver verwendet werden soll. Weitere Informationen finden Sie im folgenden Abschnitt "Hinweise".

[in] lpszPassword

Die Unicode-Zeichenfolge mit Null-Beendigung, die das Kennwort angibt, das zum Abrufen der Berechtigung vom Namespaceserver verwendet werden soll.

[in] lnReserved

Authentifizierungsflags, die zum Definieren der Bindungsoptionen verwendet werden. Weitere Informationen finden Sie unter ADS_AUTHENTICATION_ENUM.

[out] ppOleDsObj

Zeiger auf einen Zeiger auf eine IDispatch-Schnittstelle für das angeforderte Objekt.

Rückgabewert

Diese Methode unterstützt die Standardrückgabewerte, einschließlich S_OK , wenn die IDispatch-Schnittstelle mithilfe dieser Anmeldeinformationen erfolgreich abgerufen wurde.

Weitere Informationen finden Sie unter ADSI-Fehlercodes.

Hinweise

Diese Methode sollte nicht nur zum Überprüfen von Benutzeranmeldeinformationen verwendet werden.

Wenn lnReserved festgelegt ist, hängt das Verhalten von OpenDSObject von dem Anbieter ab, mit dem eine Verbindung hergestellt wird. Namespaces mit hoher Sicherheit ignorieren diese Flags möglicherweise und erfordern immer eine Authentifizierung.

Die IADsOpenDSObject::OpenDSObject-Methode verwaltet die authentifizierten und verschlüsselten Benutzeranmeldeinformationen im Cache. Zwischengespeicherte Anmeldeinformationen können in nachfolgenden Vorgängen für die Bindung an andere Verzeichnisobjekte verwendet werden. Die ADSI-Clientanwendungen sollten die vom Benutzer angegebenen Anmeldeinformationen nicht zwischenspeichern. Stattdessen sollten sie sich auf die ADSI-Infrastruktur verlassen, um die Zwischenspeicherung durchzuführen. Um die zwischengespeicherten Anmeldeinformationen zu verwenden, müssen lpszPassword und lpszUserName bei nachfolgenden Aufrufen von OpenDSObject unverändert bleiben. Das folgende Codebeispiel zeigt diesen Vorgang.

Dim dso As IADsOpenDSObject
Dim obj1, obj2 As IADs
Dim szUsername As String
Dim szPassword As String

Set dso = GetObject("LDAP:")

' Insert code securely.

' Supply full credentials to initiate a server connection.
Set obj1 = dso.OpenDSObject( _
    "LDAP://server1/CN=Dept1,DC=Fabrikam,DC=com", _
    szUsername, _
    szPassword, _
    ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)

' Perform an operation with the bound object, obj1
MsgBox obj1.Class

' Bind to another object with the cached user credential.
Set obj2 = dso.OpenDSObject( _
    "LDAP://server1/CN=Dept2,DC=Fabrikam,DC=com", _
    szUsername, _
    szPassword, _
    ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)

MsgBox obj2.Class

Die an die IADsOpenDSObject::OpenDSObject-Funktion übergebenen Anmeldeinformationen werden nur mit dem bestimmten Objekt verwendet, an das das jeweilige Objekt gebunden ist, und wirken sich nicht auf den Sicherheitskontext des aufrufenden Threads aus. Dies bedeutet, dass im folgenden Codebeispiel der Aufruf von IADsOpenDSObject::OpenDSObject andere Anmeldeinformationen als der Aufruf von GetObject verwendet.

Dim dso As IADsOpenDSObject
Dim obj1, obj2 As IADs
Dim szUsername As String
Dim szPassword As String

Set dso = GetObject("LDAP:")

' Insert code securely.

' Bind using full credentials.
Set obj1 = dso.OpenDSObject( _
    "LDAP://server1/CN=Dept1,DC=Fabrikam,DC=com", _
    szUsername, _
    szPassword, _
    ADS_SECURE_AUTHENTICATION + ADS_SERVER_BIND)

' Bind to another object with the default credentials.
Set obj2 = GetObject("LDAP://server1/CN=Dept2,DC=Fabrikam,DC=com")

Bei einer serverlosen Bindung wird der Servername "server1" nicht explizit angegeben. Stattdessen wird der Standardserver verwendet. Nur der LDAP-Anbieter unterstützt die serverlose Bindung. Um dieses Feature verwenden zu können, muss sich der Clientcomputer in einer Active Directory-Domäne befinden. Um eine serverlose Bindung von einem Computer aus zu versuchen, müssen Sie als Domänenbenutzer gebunden werden.

Damit die Zwischenspeicherung von Anmeldeinformationen ordnungsgemäß funktioniert, ist es wichtig, einen Objektverweis ausstehend zu halten, um das Cachehandle zu verwalten. Im obigen Beispiel führt ein Versuch, "obj2" nach dem Freigeben von "obj1" zu öffnen, zu einem Authentifizierungsfehler.

Die IADsOpenDSObject-Methode verwendet die Standardanmeldeinformationen, wenn lpszUserName und lpszPassword auf NULL festgelegt sind.

Wenn die Kerberos-Authentifizierung für den erfolgreichen Abschluss einer bestimmten Verzeichnisanforderung mithilfe des LDAP-Anbieters erforderlich ist, muss die lpszDNName-Bindungszeichenfolge entweder einen serverlosen ADsPath verwenden, z. B. "LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com", oder sie muss einen ADsPath mit einem vollqualifizierten DNS-Servernamen verwenden, z. B. "LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith, CN=admin,DC=Fabrikam,DC=com". Die Bindung an den Server mit einem flachen NETBIOS-Namen oder einem kurzen DNS-Namen, z. B. unter Verwendung des Kurznamens "central3" anstelle von "central3.corp.Fabrikam.com", kann zur Kerberos-Authentifizierung führen oder nicht.

Die ADsOpenObject-Hilfsfunktion bietet die gleichen Features wie die IADsOpenDSObject::OpenDSObject-Methode .

Beim LDAP-Anbieter für Active Directory können Sie lpszUserName als eine der folgenden Zeichenfolgen übergeben:

  • Der Name eines Benutzerkontos, z. B. "jeffsmith". Um einen Benutzernamen selbst zu verwenden, müssen Sie nur das ADS_SECURE_AUTHENTICATION-Flag im lnReserved-Parameter festlegen.
  • Der Benutzerpfad aus einer früheren Version von Windows, z. B. "Fabrikam\jeffsmith".
  • Distinguished Name, z. B. "CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com". Um einen DN zu verwenden, muss der lnReserved-Parameter 0 sein, oder er muss das flag ADS_USE_SSL enthalten.
  • Benutzerprinzipalname (USER Principal Name, UPN), z. B. "jeffsmith@Fabrikam.com". Um einen UPN zu verwenden, müssen Sie dem userPrincipalName-Attribut des Zielbenutzerobjekts den entsprechenden UPN-Wert zuweisen.

Beispiele

Das folgende Codebeispiel zeigt, wie Sie IADsOpenDSObject verwenden, um das Benutzerobjekt "Administrator" auf "Fabrikam" mit sicherer Authentifizierung über den LDAP-Anbieter zu öffnen.

Dim dso As IADsOpenDSObject
Dim domain As IADsDomain
Dim szUsername As String
Dim szPassword As String

On Error GoTo Cleanup

' Insert code to securely retrieve the user name and password.
 
Set dso = GetObject("LDAP:")
Set domain = dso.OpenDSObject("LDAP://Fabrikam", szUsername, _
                              szPassword, _
                              ADS_SECURE_AUTHENTICATION)

Cleanup:
    If (Err.Number <> 0 ) Then
        MsgBox("An error has occurred. " & Err.Number)
    End If
    Set dso = Nothing
    Set domain = Nothing

Im folgenden Codebeispiel wird IADsOpenDSObject verwendet, um ein Active Directory-Objekt über den LDAP-Anbieter zu öffnen.

IADsOpenDSObject *pDSO = NULL;
HRESULT hr = S_OK;
 
hr = ADsGetObject(L"LDAP:", IID_IADsOpenDSObject, (void**) &pDSO);
if (SUCCEEDED(hr))
{
    IDispatch *pDisp;
    hr = pDSO->OpenDSObject(CComBSTR("LDAP://DC=Fabrikam, DC=com"), 
                       CComBSTR("jeffsmith@Fabrikam.com"),
                       CComBSTR("passwordhere"),
                       ADS_SECURE_AUTHENTICATION, 
                       &pDisp);
    pDSO->Release();
    if (SUCCEEDED(hr))
    {
        IADs *pADs;
        hr = pDisp->QueryInterface(IID_IADs, (void**) &pADs);
        pDisp->Release();
        if (SUCCEEDED(hr))
        {
        // Perform an object manipulation here.
            pADs->Release();
        }
    }
}

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows Vista
Unterstützte Mindestversion (Server) Windows Server 2008
Zielplattform Windows
Kopfzeile iads.h
DLL Activeds.dll

Weitere Informationen

ADSI-Fehlercodes

ADS_AUTHENTICATION_ENUM

ADsOpenObject

Binding

GetObject

IADsOpenDSObject

IDispatch

LDAP-ADsPath

WNetAddConnetion2