Mengakses Active Directory dari Delphi
Agar bisa membuat, menghapus, memodifikasi user account Windows di Active Directory melalui Delphi kita perlu menggunakan ADSI (Active Directory Services Interface) dari Microsoft. ADSI sebetulnya tersedia di semua platform Win32, namun selain Windows 2000 keatas kita perlu download dulu dari http://www.microsoft.com/adsi.
Bahasan ADSI sangat kompleks. Pada tulisan ini cuma dibahas beberapa yang penting aja. ADSI adalah sejenis generic interface untuk directory services. Beberapa provider ADSI standard (COM yaitu interfaces yang dapat kita gunakan di program) adalah WinNT, IIS, LDAP dan NDS. Provider jenis WinNT dapat digunakan untuk membuat, modify user accounts, maupun groups (dan banyak hal lain lagi).
Pertama kita perlu import ADSI Type Library (dari Menu Project/Import Type Library). Type Library yang dimaksud dapat ditemukan pada system32 subdirectory (misalnya C:\WINNT\system32\activeds.tlb). File yang diperlukan adalah ‘activeds.tlb’. Jika file tersebut belum ada, kemungkinan ADSI belum ter-installed dengan benar.
Setelah berhasil import Type Library kita akan menemukan file baru pada Delphi Imports directory dengan nama activeds_tlb.pas (misalnya ..\Delphi7\Imports\activeds_tlb.pas). Selanjutnya kita perlu meng-include file ini pada uses clause agar ADSI programming bisa dilakukan pada program Delphi.
Pada contoh pembuatan user melalui ADSI, anda perlu ganti [computername] dengan nama komputer yang betul yang anda gunakan. Hal yang sama juga pada [accountname]. Program ini telah dites pada
WindowsNT 4.0, Windows 2000, dan Windows 2003.
ActiveDs_TLB, // type library ADSI
ComObj; // untuk OleCheck dan COM functions lainnya
implementation
procedure TForm1.BtnCreateUserClick(Sender: TObject);
var
Usr: IADsUser;
Comp: IADsContainer;
begin
try
Comp := GetObject(‘WinNT://[computername],computer’) as
IADsContainer;
Usr := Comp.Create(‘user’, ‘[accountname]‘) as IADsUser;
Usr.setPassword(‘passwordnya’);
Usr.SetInfo;
except
on E: EOleException do begin
ShowMessage(E.Message);
end;
end;
end;
procedure TForm1.BtnSetPasswordClick(Sender: TObject);
var
Usr: IADsUser;
begin
try
Usr := GetObject(‘WinNT://[computername]/[accountname],user’)
as IADsUser;
Usr.SetPassword(‘thenewpassword’);
except
on E: EOleException do begin
ShowMessage(E.Message);
end;
end;
end;
// GetObject is a implementation of the VB GetObject call
// I’ve found this code (GetObject) on the Usenet.
//
// With GetObject can you bind to an existing ADSI provider
// using a ‘ADSIPath’ (for example WinNT://…. or
// IIS://localhost).
function TForm1.GetObject(const Name: string): IDispatch;
var
Moniker: IMoniker;
Eaten: integer;
BindContext: IBindCtx;
Dispatch: IDispatch;
begin
OleCheck(CreateBindCtx(0, BindContext));
OleCheck(MkParseDisplayName(BindContext,
PWideChar(WideString(Name)),
Eaten,
Moniker));
OleCheck(Moniker.BindToObject(BindContext, NIL, IDispatch,
Dispatch));
Result := Dispatch;
end;
end.
Melalui ADSI kita dapat juga memodifikasi setting user account. Baris dibawah ini digunakan untuk mengganti ‘Password never expires’ flag suatu account:
var
Usr: IADsUser;
begin
try
Usr := GetObject(‘WinNT://[computername]/[acccoutname],user’) as
IADsUser;
// Check the Checkbox State…
if CheckBoxPasswordNeverExpires.Checked then
Usr.Put(‘UserFlags’, Usr.Get(‘UserFlags’) OR 65536)
// 65536 is defined as UF_DONT_EXPIRE_PASSWORD in iads.h
// from the ADSI SDK available from Microsoft
else
Usr.Put(‘UserFlags’, Usr.Get(‘UserFlags’) XOR 65536);
Usr.SetInfo;
except
on E: EOleException do begin
ShowMessage(E.Message);
end;
end;
end;
Lebih lanjut ….
Untuk lebih mendalami ADSI anda perlu cek detail interface IADsUser atau IADsContainer. Informasi ADSI SDK dari Microsoft dapat dilihat di sini nih: http://msdn.microsoft.com/en-us/library/bb905317.aspx.
Referensi: www.delphi3000.com
Akhmad Daniel Sembiring
vITraining.com – Qualified IT Products, Outsourcing, and Services
Ligarwangi.com – Linux, E-book, Coffee, Gift, etc




Recent Comments