Enlace con GetObject y ADsGetObject
Las funciones GetObject y ADsGetObject se usan para enlazar a objetos de servicio de directorio sin autenticación. La aplicación no es necesaria para proporcionar credenciales al acceder a los datos del servicio de directorio. ADSI usa el contexto de seguridad del subproceso de llamada. Sin embargo, si se produce un error en la autenticación segura, ADSI intenta realizar un enlace sencillo con un nombre de usuario nulo y una contraseña nula. Si el enlace simple se realiza correctamente, el contexto de usuario del enlace es Invitado. Un enlace simple usa la autenticación de texto no cifrado. Dado que no se transmite ningún nombre de usuario o contraseña a través de la red, esto no es un problema de seguridad.
La función GetObject se usa para enlazar a objetos de servicio de directorio en lenguajes que admiten la automatización, como Visual Basic. La función GetObject requiere una cadena de moniker. En ADSI, la cadena de enlace es la cadena de moniker.
En lenguajes que no admiten directamente la automatización, como C o C++, ADSI proporciona la función ADsGetObject para enlazar a objetos de servicio de directorio. Como alternativa, las funciones MkParseDisplayName y MkParseDisplayNameEx se pueden usar para lograr el mismo resultado que GetObject.
Para un servicio que se ejecuta en la cuenta LocalSystem, el contexto de seguridad usado por GetObject y ADsGetObject depende del equipo en el que se ejecuta el servicio. Si el servicio se ejecuta como LocalSystem en un controlador de dominio, el servicio tiene acceso completo de nivel de sistema a Active Directory. Si el servicio no se ejecuta en un controlador de dominio, el servicio tiene los derechos de acceso y los privilegios concedidos a la cuenta de equipo para el equipo en el que se ejecuta el servicio; esto es significativamente menos eficaz que el acceso de nivel de sistema.
Ejemplos
En el siguiente ejemplo de código de Visual Basic se muestra cómo usar la función GetObject para enlazar a un objeto .
Dim myUser as IADs
Set myUser = GetObject("LDAP://CN=jeffsmith,DC=fabrikam,DC=com")
En el ejemplo de código de C++ siguiente se muestra cómo usar la función ADsGetObject para enlazar a un objeto .
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();