Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения
KANSoftWare

Создание Аккаунта в Windows, используя ADSI (Активные директории)

Delphi , Файловая система , Активные директории

Создание Аккаунта в Windows, используя ADSI (Активные директории)


Встречаются два программиста. Первый: - Слушай, одкуда у тебя такой классный велик?- - Да не поверишь. Сижу вчера на берегу, обдумываю новую программу, тут подъезжает ко мне такая красивая девушка на велосипеде, снимает с себя все и говорит:"Бери все, что хочешь.". Ну, я и взял велосипед, а на хрена мне ее одежда?.

Чтобы создавать пользовательские аккаунты в Windows на Delphi можно использовать ADSI (Active Directory Services Interface) от Microsoft. Вы думаете, что ADSI это новая примочка для Windows 2000 (судя по названию) , но оказывается ADSI доступна для всех платформ Win32. Для этого Вам потребуется всего навсего скачать ADSI для Windows (более полная информация на http://www.microsoft.com/adsi ). Ну и конечно же ADSI входит в поставку Windows 2000.

ADSI довольно большой предмет для изучения. В данном примере я затрону этот предмет поверхностно. ADSI - это своего рода основа для различных сервисов (обычно основанных на директориях) оперционной системы. Например, стандартными ADSI сервисами можно назвать (COM интерфейсы, которые можно использовать в программах) WinNT, IIS, LDAP и NDS. WinNT сервис может тем самым использоваться для создания пользовательских аккаунтов, модификации их или модификации групп.

Следующий небольшой пример показывает необходимые шаги для создания пользовательского аккаунта в NT/2000, используя ADSI:

Во первых Вам прийдётся импортировать Библиотеку Типов ADSI (Menu Project/Import Type Library). Библиотеку Типов можно найти в поддирректории system32 (Например C:\WINNT\system32\activeds.tlb). Требуемый файл называется 'activeds.tlb'. Если такого файла нет, то проверьте, правильно ли вы установили ADSI. После успешного импортирования Библиотеки Типов Вы найдёте новый файл в дирректории ипортов Delphi, файл будет называться "activeds_tlb.pas" (..\Delphi5\Imports\activeds_tlb.pas). Чтобы приступить к программированию ADSI в Delphi, необходимо включить этот файл в Ваш проект.

Далее в примере, необходимо заменить [computername] на фактическое имя компьютера, с которым Вы работаете. То же надо проделать с [accountname]. Пример тестировался на WindowsNT 4.0 и Windows 2000.


...

uses ActiveX, // используется для COM Moniker stuff...
ActiveDs_TLB, // созданная библиотека типов
ComObj;       // используется для OleCheck и других функций COM

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.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 использует вызов VB GetObject
// Данный код (GetObject) был найден в Usenet.

// GetObject позволяет связаться с существующим ADSI сервисом
// используя 'ADSIPath' (например WinNT://.... или
// 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.

Через ADSI Вы так же можете изменять параметры пользовательских аккаунтов. Следующий код изменяет флаг 'Password never expires' нужного аккаунта:


procedure TFormMain.ButtonNeverExpiresClick(Sender: TObject);
var
  Usr: IADsUser;
begin
  try
    Usr := GetObject('WinNT://[computername]/[acccoutname],user') as IADsUser;

    // Проверяем состояние чекбоксов...
    if CheckBoxPasswordNeverExpires.Checked then
      Usr.Put('UserFlags', Usr.Get('UserFlags') or 65536)
    // 65536 объявлено как UF_DONT_EXPIRE_PASSWORD в iads.h
    // в ADSI SDK от Microsoft
    else
      Usr.Put('UserFlags', Usr.Get('UserFlags') xor 65536);

    Usr.SetInfo;

  except
    on E: EOleException do
    begin
      ShowMessage(E.message);
    end;
  end;
end;

В завершении...

Чтобы использовать большие возможности ADSI , необходимо проверить, поддерживаются ли такие сервисы как IADsUser или IADsContainer.

Я рекомендую поработать с ADSI SDK от Microsoft и более детально изучить Библиотеку Типов.

Некоторые ADSI компоненты я постараюсь выложить на своей домашней страничке http://www.jespersen.ch. Так что, если интересно, то заходите и мыльте на philip@jespersen.ch

Статья Создание Аккаунта в Windows, используя ADSI (Активные директории) раздела Файловая система Активные директории может быть полезна для разработчиков на Delphi и FreePascal.


Комментарии и вопросы


Ваше мнение или вопрос к статье в виде простого текста (Tag <a href=... Disabled). Все комментарии модерируются, модератор оставляет за собой право удалить непонравившейся ему комментарий.

заголовок

e-mail

Ваше имя

Сообщение

Введите код




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Активные директории ::


реклама



©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru Rambler's Top100
16.04.2024 09:34:25/0.06326699256897/2