Función ADsOpenObject (adshlp.h)

La función ADsOpenObject se enlaza a un objeto ADSI mediante credenciales explícitas de nombre de usuario y contraseña. ADsOpenObject es una función contenedora para IADsOpenDSObject y es equivalente al método IADsOpenDSObject::OpenDsObject .

Sintaxis

HRESULT ADsOpenObject(
  [in]  LPCWSTR lpszPathName,
  [in]  LPCWSTR lpszUserName,
  [in]  LPCWSTR lpszPassword,
  [in]  DWORD   dwReserved,
  [in]  REFIID  riid,
  [out] void    **ppObject
);

Parámetros

[in] lpszPathName

Tipo: LPCWSTR

Cadena Unicode terminada en null que especifica el ADsPath del objeto ADSI. Para obtener más información y ejemplos de código de cadenas de enlace para este parámetro, consulte LDAP ADsPath y WinNT ADsPath.

[in] lpszUserName

Tipo: LPCWSTR

Cadena Unicode terminada en null que especifica el nombre de usuario que se va a proporcionar al servicio de directorio que se usará para las credenciales. Esta cadena siempre debe tener el formato "<dominio\><nombre> de usuario" para evitar ambigüedades. Por ejemplo, si DomainA y DomainB tienen una relación de confianza y ambos dominios tienen un usuario con el nombre "user1", no es posible predecir qué dominio ADsOpenObject usará para validar "user1".

[in] lpszPassword

Tipo: LPCWSTR

Cadena Unicode terminada en null que especifica la contraseña que se va a proporcionar al servicio de directorio que se va a usar para las credenciales.

[in] dwReserved

Tipo: DWORD

Marcas de autenticación específicas del proveedor usadas para definir las opciones de enlace. Para obtener más información, consulte ADS_AUTHENTICATION_ENUM.

[in] riid

Tipo: REFIID

Identificador de interfaz de la interfaz solicitada en este objeto.

[out] ppObject

Tipo: VOID**

Puntero a un puntero a la interfaz solicitada.

Valor devuelto

Tipo: HRESULT

Este método admite los valores devueltos HRESULT estándar, incluidos los siguientes.

Para obtener más información, consulta Códigos de error adsi.

Comentarios

Esta función no se debe usar solo para validar las credenciales de usuario.

Un cliente de C/C++ llama a la función auxiliar ADsOpenObject para enlazar a un objeto ADSI mediante el nombre de usuario y la contraseña proporcionados como credenciales para el servicio de directorio adecuado. Si lpszUsername y lpszPassword son NULL y se establece ADS_SECURE_AUTHENTICATION , ADSI se enlaza al objeto mediante el contexto de seguridad del subproceso que realiza la llamada, que es el contexto de seguridad de la cuenta de usuario en la que se ejecuta la aplicación o de la cuenta de usuario cliente que suplanta el subproceso que realiza la llamada.

Las credenciales que se pasan a la función ADsOpenObject solo se usan con el objeto determinado enlazado a y no afectan al contexto de seguridad del subproceso que realiza la llamada. Esto significa que, en el ejemplo siguiente, la llamada a ADsOpenObject usará credenciales diferentes que la llamada a ADsGetObject.

HRESULT hr;
IADs *padsRoot1;
IADs *padsRoot2;

hr = ADsOpenObject(L"LDAP://rootDSE",
    pwszUsername,
    pwszPassword,
    ADS_SECURE_AUTHENTICATION,
    IID_IADs,
    (LPVOID*)&padsRoot1);

hr = ADsGetObject(L"LDAP://rootDSE",
    IID_IADs,
    (LPVOID*)&padsRoot2);

Para trabajar con WinNT: proveedor, puedes pasar lpszUsername como una de las siguientes cadenas:

  • El nombre de una cuenta de usuario, es decir, "jeffsmith".
  • El nombre de usuario de estilo de Windows, es decir, "Fabrikam\jeffsmith".
Con el proveedor LDAP para Active Directory, puede pasar lpszUsername como una de las cadenas siguientes:
  • Nombre de una cuenta de usuario, como "jeffsmith". Para usar un nombre de usuario por sí mismo, solo debe establecer la marca ADS_SECURE_AUTHENTICATION en el parámetro dwReserved .
  • Ruta de acceso del usuario de una versión anterior de Windows, como "Fabrikam\jeffsmith".
  • Nombre distintivo, como "CN=Jeff Smith,OU=Sales,DC=Fabrikam,DC=Com". Para usar un DN, el parámetro dwReserved debe ser cero o debe incluir la marca ADS_USE_SSL .
  • Nombre principal de usuario (UPN), como "jeffsmith@Fabrikam.com". Para usar un UPN, asigne el valor UPN adecuado para el atributo userPrincipalName del objeto de usuario de destino.
Si se requiere la autenticación Kerberos para completar correctamente una solicitud de directorio específica mediante el proveedor LDAP, la cadena de enlace lpszPathName debe usar un ADsPath sin servidor, como "LDAP://CN=Jeff Smith,CN=admin,DC=Fabrikam,DC=com", o bien debe usar ADsPath con un nombre de servidor DNS completo, como "LDAP://central3.corp.Fabrikam.com/CN=Jeff Smith, CN=admin,DC=Fabrikam,DC=com". El enlace al servidor con un nombre NETBIOS plano o un nombre DNS corto, por ejemplo, con el nombre corto "central3" en lugar de "central3.corp.Fabrikam.com", puede o no producir autenticación Kerberos.

En el ejemplo de código siguiente se muestra cómo enlazar a un objeto de servicio de directorio con las credenciales de usuario solicitadas.

IADs *pObject;
LPWSTR szUsername = NULL;
LPWSTR szPassword = NULL
HRESULT hr;

// Insert code to securely retrieve the user name and password.

hr = ADsOpenObject(L"LDAP://CN=Jeff,DC=Fabrikam,DC=com",
                   "jeffsmith",
                   "etercespot",
                   ADS_SECURE_AUTHENTICATION, 
                   IID_IADs,
                   (void**) &pObject);

Requisitos

Requisito Value
Cliente mínimo compatible Windows Vista
Servidor mínimo compatible Windows Server 2008
Plataforma de destino Windows
Encabezado adshlp.h
Library Activeds.lib
Archivo DLL Activeds.dll

Consulte también

Códigos de error adsi

Funciones ADSI

ADsOpenObject e IADsOpenDSObject::OpenDsObject

Binding

IADsOpenDSObject

IADsOpenDSObject::OpenDsObject