Home > Delphi > Mengakses Active Directory dari Delphi

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.

uses ActiveX,        // hal-hal yang berhubungan dengan COM
     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:

procedure TFormMain.ButtonNeverExpiresClick(Sender: TObject);
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

  • Share/Bookmark
  1. No comments yet.
  1. No trackbacks yet.

Ikutilah Seminar GPS! "MEMBONGKAR RAHASIA BISNIS GPS TRACKING" - Pembicara : Ir. Akhmad Daniel Sembiring (CEO Vitraining.com & GpsTrackingIndonesia.com) - Bandung, Sabtu 7 Agustus 2010 - Hotel Arion Swiss - Belhotel, Jl. Otto Iskandardinata No. 16 Bandung - Investasi : 2 Jt (sebelum 31 JULI 2010 HANYA 1 Jt) - Register ONLINE : seminar-gps.vitraining.com - More Info e-mail to : info@gpstrackingindonesia.com

This site uses a Hackadelic PlugIn, Hackadelic SEO Table Of Contents 1.6.0.