分享
 
 
 

在Delphi中ADSI创建Windows用户帐号

王朝delphi·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

在Delphi中可以使用微软的ADSI(活动目录服务接口)创建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提供者(Provider)能创建、修改用户帐号,设置或修改组。

下面的小程序展示了在NT/2000下使用ADSI创建用户帐号必要的步骤:

首先你需要导入ADSI类库(Project/Import Type Library菜单)。该类库可以在system32子目录中找到(如 C:\WINNT\system32\activeds.tlb)。文件名必须是“ activeds.tlb”。如果找不到该文件,你需要正确的安装ADSI。在成功导入类库以后,可以在Delphi的Imports目录下找到activeds_tlb.pas这样一个文件(如 ..\Delphi6\Imports\activeds_tlb.pas)。还需要这个文件包含在你的Uses语句,让ADSI可以在Delphi程序中使用。

下面是ADSI创建用户的例子。需要用你将要创建用户的真正的计算机名称替换[computername]。同样[accountname]是要创建的用户帐号。在WindowNT 4.0和Windows 2000中测试通过。

...

uses ActiveX, // 使用了COM Moniker实例

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是在Usenet上找到的VB代码(GetObject)。

//

// GetObject能使用“ADSIPath”(如WinNT://....或IIS://localhost)

// 和现有的ADSI提供者捆绑在一起

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修改用户帐号的设置。下列代码能改变任何帐号的“密码永不过期”选项。

procedure TFormMain.ButtonNeverExpiresClick(Sender: TObject);

var

Usr: IADsUser;

begin

try

Usr := GetObject('WinNT://[computername]/[acccoutname],user') as IADsUser;

// 检查Checkbox的状态

if CheckBoxPasswordNeverExpires.Checked then

Usr.Put('UserFlags', Usr.Get('UserFlags') OR 65536)

// 65536在微软ADSI SDK的iads.h中被定义为UF_DONT_EXPIRE_PASSWORD

else

Usr.Put('UserFlags', Usr.Get('UserFlags') XOR 65536);

Usr.SetInfo;

except

on E: EOleException do begin

ShowMessage(E.Message);

end;

end;

end;

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有