Freigeben über


IADsOpenDSObject::OpenDSObject-Methode (iads.h)

Die IADsOpenDSObject::OpenDSObject--Methode bindet an ein ADSI-Objekt, wobei die angegebenen Anmeldeinformationen verwendet werden, 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 von 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-Anbieter verwenden, der einen bestimmten Servernamen enthält, sollte der lnReserved--Parameter das ADS_SERVER_BIND Flag 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 mit Null beendete Unicode-Zeichenfolge, die das Kennwort angibt, das zum Abrufen der Berechtigung vom Namespaceserver verwendet werden soll.

[in] lnReserved

Authentifizierungskennzeichnungen, 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 des angeforderten Objekts.

Rückgabewert

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

Weitere Informationen finden Sie unter ADSI-Fehlercodes.

Bemerkungen

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

Wenn lnReserved festgelegt ist, hängt das Verhalten OpenDSObject- vom 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 zum Binden an andere Verzeichnisobjekte verwendet werden. Die ADSI-Clientanwendungen sollten die vom Benutzer bereitgestellten Anmeldeinformationen nicht zwischenspeichern. Stattdessen sollten sie sich auf DIE ADSI-Infrastruktur verlassen, um zwischenspeichern zu können. Um die zwischengespeicherten Anmeldeinformationen zu verwenden, müssen lpszPassword- und lpszUserName- in allen 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 das IADsOpenDSObject::OpenDSObject-Funktion übergebenen Anmeldeinformationen werden nur mit dem bestimmten Objekt verwendet, das an den aufruften Thread gebunden ist und sich nicht auf den Sicherheitskontext des aufrufenden Threads auswirkt. Dies bedeutet, dass im folgenden Codebeispiel der Aufruf von IADsOpenDSObject::OpenDSObject andere Anmeldeinformationen als der Aufruf von GetObjectverwendet.

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 zu verwenden, muss sich der Clientcomputer in einer Active Directory-Domäne befinden. Um eine serverlose Bindung von einem Computer zu versuchen, müssen Sie als Domänenbenutzer binden.

Damit die Zwischenspeicherung von Anmeldeinformationen ordnungsgemäß funktioniert, ist es wichtig, dass ein Objektverweis offen bleibt, um den Cachehandle beizubehalten. 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 der lpszDNName Bindungszeichenfolge entweder einen serverlosen ADsPath verwenden, z. B. "LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com", oder er muss einen ADsPath mit einem vollqualifizierten DNS-Servernamen wie "LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith" verwenden. CN=admin,DC=Fabrikam,DC=com". Eine 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 die Kerberos-Authentifizierung auch nicht zur Folge haben.

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

Mit dem 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 null sein, oder er muss das ADS_USE_SSL-Flag enthalten.
  • Benutzerprinzipalname (USER Principal Name, UPN), z. B. "jeffsmith@Fabrikam.com". Um einen UPN zu verwenden, müssen Sie den entsprechenden UPN-Wert für den userPrincipalName Attribut des Zielbenutzerobjekts zuweisen.

Beispiele

Im folgenden Codebeispiel wird gezeigt, 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
mindestens unterstützte Client- Windows Vista
mindestens unterstützte Server- Windows Server 2008
Zielplattform- Fenster
Header- iads.h
DLL- Activeds.dll

Siehe auch

ADSI-Fehlercodes

ADS_AUTHENTICATION_ENUM

ADsOpenObject-

Bindungs-

GetObject-

IADsOpenDSObject-

IDispatch-

LDAP-ADsPath-

WNetAddConnetion2-