يمكنك استخدام ADSI (واجهة خدمة الدليل النشط) من Microsoft لإنشاء حسابات مستخدم Windows في دلفي. ربما يرجع ذلك إلى اسم ADSI، حيث يعتقد العديد من الأشخاص أنه لا يمكن استخدام ADSI إلا في نظام التشغيل Windows 2000. وفي الواقع، تدعم كافة الأنظمة الأساسية لـ Win32 ADSI. قد يكون من الضروري تنزيل ADSI لإصدارات Windows المختلفة. (مزيد من التفاصيل http://www.microsoft.com/china/windows2000/library/howitworks/activedirectory/adsilinks.htm). يتضمن Windows 2000 ADSI.
ADSI هو موضوع كبير. في هذه المقالة سأقدمها بإيجاز فقط. ADSI هي واجهة شائعة للعديد من خدمات الكمبيوتر المختلفة (المعتمدة في الغالب على الدليل). بعض موفري ADSI القياسيين (يشبه PROvider واجهة COM التي يمكن استخدامها في برامجك) هم WinNT وIIS وLDAP وNDS. استخدم موفر WinNT لإنشاء حسابات المستخدمين وتعديلها، وتعيين المجموعات أو تعديلها.
يوضح البرنامج الصغير التالي الخطوات اللازمة لإنشاء حساب مستخدم باستخدام ADSI ضمن NT/2000:
تحتاج أولاً إلى استيراد مكتبة فئة ADSI (قائمة مكتبة نوع المشروع/الاستيراد). يمكن العثور على مكتبة الفئة هذه في الدليل الفرعي system32 (مثل C:/WINNT/system32/activeds.tlb). يجب أن يكون اسم الملف "activeds.tlb". إذا لم يتم العثور على الملف، فأنت بحاجة إلى تثبيت ADSI بشكل صحيح. بعد نجاح استيراد مكتبة الفصل، يمكنك العثور على ملف مثل activeds_tlb.pas في دليل واردات دلفي (مثل ../Delphi6/Imports/activeds_tlb.pas). يجب أيضًا تضمين هذا الملف في بيان الاستخدامات الخاص بك حتى يمكن استخدام ADSI في برامج دلفي.
يوجد أدناه مثال على قيام ADSI بإنشاء مستخدم. تحتاج إلى استبدال [اسم الكمبيوتر] باسم الكمبيوتر الحقيقي الذي ستقوم بإنشاء المستخدم فيه. وبالمثل، فإن [accountname] هو حساب المستخدم الذي سيتم إنشاؤه. تم اختباره في WindowNT 4.0 وWindows 2000.
...
يستخدم ActiveX، // يستخدم مثيل COM Moniker
ActiveDs_TLB, // تم إنشاء مكتبة الفصل
ComObj; // يستخدم OleCheck ووظائف COM الأخرى
تطبيق
الإجراء TForm1.BtnCreateUserClick(Sender: TObject);
فار
المستخدم: IADsUser;
شركات: IADsContainer؛
يبدأ
يحاول
شركات := GetObject('WinNT://[computername],computer') as
IADsContainer;
Usr := Comp.Create('user', '[accountname]') as IADsUser;
Usr.SetInfo;
يستثني
على E: EOleException يبدأ بالفعل
ShowMessage(E.Message);
نهاية؛
نهاية؛
نهاية؛
الإجراء TForm1.BtnSetPassWordClick(Sender: TObject);
فار
المستخدم: IADsUser;
يبدأ
يحاول
Usr := GetObject('WinNT://[اسم الكمبيوتر]/[اسم الحساب]، المستخدم')
مثل IADsUser؛
Usr.SetPassword('thenewpassword');
يستثني
على E: يبدأ EOleException
ShowMessage(E.Message);
نهاية؛
نهاية؛
نهاية؛
// GetObject هو رمز VB (GetObject) الموجود على Usenet.
//
// يمكن لـ GetObject استخدام "ADSipath" (مثل WinNT://.... أو IIS://localhost)
// حزمة مع موفر ADSI الحالي
الدالة TForm1.GetObject(اسم ثابت: سلسلة): IDispatch;
فار
اللقب: IMoniker؛
أكلت: عدداً صحيحاً؛
BindContext: IBindCtx;
الإرسال: IDispatch؛
يبدأ
OleCheck(CreateBindCtx(0, BindContext));
OleCheck(MkParseDisplayName(BindContext,
PWideChar(WideString(الاسم))،
أكل،
اللقب))؛
OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch,
إرسال))؛
النتيجة := إرسال؛
نهاية؛
نهاية.
يمكنك أيضًا استخدام ADSI لتعديل إعدادات حساب المستخدم. سيؤدي الكود التالي إلى تغيير خيار "لا تنتهي صلاحية كلمة المرور أبدًا" لأي حساب.
الإجراء TFormMain.ButtonNeverExpiresClick(Sender: TObject);
فار
المستخدم: IADsUser;
يبدأ
يحاول
Usr := GetObject('WinNT://[computername]/[acccoutname],user') asIADsUser;
// التحقق من حالة خانة الاختيار
إذا CheckBoxPasswordNeverExpires.Checked بعد ذلك
Usr.Put('UserFlags', Usr.Get('UserFlags') أو 65536)
// تم تعريف 65536 على أنه UF_DONT_EXPIRE_PASSWORD في iads.h الخاص بـ Microsoft ADSI SDK
آخر
Usr.Put('UserFlags', Usr.Get('UserFlags') XOR 65536);
Usr.SetInfo;
يستثني
على E: EOleException يبدأ بالفعل
ShowMessage(E.Message);
نهاية؛
نهاية؛
نهاية؛