Vous pouvez utiliser l'ADSI (Active Directory Service Interface) de Microsoft pour créer des comptes d'utilisateurs Windows dans Delphi. Probablement à cause du nom ADSI, beaucoup de gens pensent qu'ADSI ne peut être utilisé que sous Windows 2000. En fait, toutes les plates-formes Win32 prennent en charge ADSI. Il peut être nécessaire de télécharger ADSI pour différentes versions de Windows. (Plus de détails http://www.microsoft.com/china/windows2000/library/howitworks/activedirectory/adsilinks.htm). Windows 2000 inclut ADSI.
ADSI est un grand sujet. Dans cet article, je ne le présenterai que brièvement. ADSI est une interface commune à de nombreux services informatiques différents (principalement basés sur des annuaires). Certains fournisseurs ADSI standard (PRovider est comme une interface COM qui peut être utilisée dans vos programmes) sont WinNT, IIS, LDAP et NDS. Utilisez le fournisseur WinNT pour créer et modifier des comptes d'utilisateurs et définir ou modifier des groupes.
Le petit programme suivant montre les étapes nécessaires pour créer un compte utilisateur en utilisant ADSI sous NT/2000 :
Vous devez d’abord importer la bibliothèque de classes ADSI (menu Projet/Importer la bibliothèque de types). Cette bibliothèque de classes se trouve dans le sous-répertoire system32 (tel que C:/WINNT/system32/activeds.tlb). Le nom du fichier doit être "activeds.tlb". Si le fichier est introuvable, vous devez installer ADSI correctement. Après avoir importé avec succès la bibliothèque de classes, vous pouvez trouver un fichier tel que activeds_tlb.pas dans le répertoire Imports de Delphi (tel que ../Delphi6/Imports/activeds_tlb.pas). Ce fichier doit également être inclus dans votre instruction Uses afin que ADSI puisse être utilisé dans les programmes Delphi.
Vous trouverez ci-dessous un exemple d'ADSI créant un utilisateur. Vous devez remplacer [nom de l'ordinateur] par le véritable nom de l'ordinateur sur lequel vous allez créer l'utilisateur. De même, [nom du compte] est le compte utilisateur à créer. Testé sous WindowNT 4.0 et Windows 2000.
...
utilise ActiveX, // utilise l'instance COM Moniker
ActiveDs_TLB, // Bibliothèque de classes créée
ComObj; //Utilise OleCheck et d'autres fonctions COM
mise en œuvre
procédure TForm1.BtnCreateUserClick(Expéditeur : TObject);
var
Usr : IADsUser ;
Comp : IADsContainer ;
commencer
essayer
Comp := GetObject('WinNT://[nom de l'ordinateur],ordinateur') comme
Conteneur IAD ;
Usr := Comp.Create('user', '[accountname]') en tant qu'IADsUser ;
Usr.SetInfo ;
sauf
sur E : EOleException commence
ShowMessage(E.Message);
fin;
fin;
fin;
procédure TForm1.BtnSetPassWordClick(Expéditeur : TObject);
var
Usr : IADsUser ;
commencer
essayer
Usr := GetObject('WinNT://[nom de l'ordinateur]/[nom du compte],utilisateur')
en tant qu'utilisateur IAD ;
Usr.SetPassword('le nouveau mot de passe');
sauf
sur E : EOleException commence
ShowMessage(E.Message);
fin;
fin;
fin;
// GetObject est le code VB (GetObject) trouvé sur Usenet.
//
// GetObject peut utiliser "ADSipath" (tel que WinNT://....ou IIS://localhost)
// Offre groupée avec le fournisseur ADSI existant
fonction TForm1.GetObject (const Nom : chaîne) : IDispatch ;
var
Surnom : IMoniker ;
Consommé : entier ;
BindContext : IBindCtx ;
Expédition : IDispatch ;
commencer
OleCheck(CreateBindCtx(0, BindContext));
OleCheck(MkParseDisplayName(BindContext,
PWideChar(WideString(Nom)),
Mangé,
Surnom));
OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch,
Expédition));
Résultat := Expédition ;
fin;
fin.
Vous pouvez également utiliser ADSI pour modifier les paramètres du compte utilisateur. Le code suivant modifiera l'option « Le mot de passe n'expire jamais » pour n'importe quel compte.
procédure TFormMain.ButtonNeverExpiresClick(Sender: TObject);
var
Usr : IADsUser ;
commencer
essayer
Usr := GetObject('WinNT://[computername]/[acccoutname],user') asIADsUser;
// Vérifiez l'état de la case à cocher
si CheckBoxPasswordNeverExpires.Checked alors
Usr.Put('UserFlags', Usr.Get('UserFlags') OU 65536)
// 65536 est défini comme UF_DONT_EXPIRE_PASSWORD dans iads.h du SDK Microsoft ADSI
autre
Usr.Put('UserFlags', Usr.Get('UserFlags') XOR 65536);
Usr.SetInfo ;
sauf
sur E : EOleException commence
ShowMessage(E.Message);
fin;
fin;
fin;