Puede utilizar ADSI (Interfaz de servicio de Active Directory) de Microsoft para crear cuentas de usuario de Windows en Delphi. Probablemente debido al nombre ADSI, mucha gente piensa que ADSI sólo se puede utilizar en Windows 2000. De hecho, todas las plataformas Win32 son compatibles con ADSI. Puede que sea necesario descargar ADSI para diferentes versiones de Windows. (Más detalles http://www.microsoft.com/china/windows2000/library/howitworks/activedirectory/adsilinks.htm). Windows 2000 incluye ADSI.
ADSI es un gran tema. En este artículo solo lo presentaré brevemente. ADSI es una interfaz común para muchos servicios informáticos diferentes (principalmente basados en directorios). Algunos proveedores ADSI estándar (PRovider es como una interfaz COM que puede usarse en sus programas) son WinNT, IIS, LDAP y NDS. Utilice el proveedor WinNT para crear y modificar cuentas de usuario y configurar o modificar grupos.
El siguiente pequeño programa muestra los pasos necesarios para crear una cuenta de usuario usando ADSI bajo NT/2000:
Primero necesita importar la biblioteca de clases ADSI (menú Proyecto/Biblioteca de tipos de importación). Esta biblioteca de clases se puede encontrar en el subdirectorio system32 (como C:/WINNT/system32/activeds.tlb). El nombre del archivo debe ser "activeds.tlb". Si no se encuentra el archivo, debe instalar ADSI correctamente. Después de importar con éxito la biblioteca de clases, puede encontrar un archivo como activeds_tlb.pas en el directorio de Importaciones de Delphi (como ../Delphi6/Imports/activeds_tlb.pas). Este archivo también debe incluirse en su declaración de Usos para que ADSI pueda usarse en programas Delphi.
A continuación se muestra un ejemplo de ADSI creando un usuario. Debe reemplazar [nombre de computadora] con el nombre real de la computadora donde va a crear el usuario. Asimismo, [nombre de cuenta] es la cuenta de usuario que se creará. Probado en WindowNT 4.0 y Windows 2000.
...
usa ActiveX, // usa la instancia COM Moniker
ActiveDs_TLB, // Biblioteca de clases creada
ComObj; //Utiliza OleCheck y otras funciones COM
implementación
procedimiento TForm1.BtnCreateUserClick (Remitente: TObject);
var
Usr: IADsUser;
Comp: IADsContainer;
comenzar
intentar
Comp := GetObject('WinNT://[nombre de computadora],computadora') como
Contenedor IAD;
Usr := Comp.Create('usuario', '[nombre de cuenta]') como IADsUser;
Usuario.SetInfo;
excepto
en E: EOleException comienza
Mostrar mensaje (E.Mensaje);
fin;
fin;
fin;
procedimiento TForm1.BtnSetPassWordClick(Remitente: TObject);
var
Usr: IADsUser;
comenzar
intentar
Usr := GetObject('WinNT://[nombre de computadora]/[nombre de cuenta],usuario')
como IADsUser;
Usr.SetPassword('lanuevacontraseña');
excepto
en E: EOleException comienza
Mostrar mensaje (E.Mensaje);
fin;
fin;
fin;
// GetObject es el código VB (GetObject) que se encuentra en Usenet.
//
// GetObject puede utilizar "ADSipath" (como WinNT://....o IIS://localhost)
// Paquete con proveedor ADSI existente
función TForm1.GetObject (nombre constante: cadena): IDispatch;
var
Apodo: IMoniker;
Comido: entero;
BindContext: IBindCtx;
Despacho: IDispatch;
comenzar
OleCheck(CreateBindCtx(0, BindContext));
OleCheck(MkParseDisplayName(BindContext,
PWideChar(WideString(Nombre)),
Comido,
Apodo));
OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch,
Despacho));
Resultado := Despacho;
fin;
fin.
También puede utilizar ADSI para modificar la configuración de la cuenta de usuario. El siguiente código cambiará la opción "La contraseña nunca caduca" para cualquier cuenta.
procedimiento TFormMain.ButtonNeverExpiresClick(Remitente: TObject);
var
Usr: IADsUser;
comenzar
intentar
Usr := GetObject('WinNT://[nombre de computadora]/[nombre de cuenta],usuario') asIADsUser;
// Comprobar el estado de la casilla de verificación
si CheckBoxPasswordNeverExpires.Checked entonces
Usr.Put('UserFlags', Usr.Get('UserFlags') O 65536)
// 65536 se define como UF_DONT_EXPIRE_PASSWORD en iads.h de Microsoft ADSI SDK
demás
Usr.Put('UserFlags', Usr.Get('UserFlags') XOR 65536);
Usuario.SetInfo;
excepto
en E: EOleException comienza
Mostrar mensaje (E.Mensaje);
fin;
fin;
fin;