dedecms织梦内容管理系统  
 
首页 | 方舟产品 | 系统优化 | 硬件系统 | 软件系统 | 网络系统 | 无盘网络 | 软件下载 | 杀毒防黑 | 专题 | 会员中心 | 方舟论坛
  当前位置:方舟系统站>系统优化>win 2003优化>文章内容
Delphi深度探索-活动目录开发
来源: 作者: 发布时间:2007-05-10  



活动目录是 Windows NT 4.0 和 Windows 2000 使用的目录服务。要想使用活动目录服务,需要调用 ADSI( 活动目录服务接口 ) 。 ADSI 是一组以 COM 接口的形式提供目录服务的,程序员可以通过 ADSI 存取四种网络目录结构: WinNT (Microsoft SAM 数据库 ) 、 LDAP ( 轻量目录存取协议 ) 、 NDS (NetWare 目录服务 ) 和 NWCOMPAT (Novell NetWare 3.x) 。

ADSI 可以使 Windows NT 管理员的工作变得轻松。 ADSI 支持管理员执行一些一般的管理任务,比如添加新用户、管理打印机、安全设定和控制 NT 域。因为 ADSI 使用 COM 接口,任何支持 COM 的编程语言像 Delphi 、 BCB 、 VB 、 VC 等都可以调用 ADSI 。

图 1.111

活动目录运行在 Windows NT 4.0 和 Windows 2000 上。客户端程序可以运行在 Windows 95 、 Windows 98 、 Windows NT 4.0 和 Windows 2000 上。为了使用 ADSI ,必须安装 ADSI COM 接口。 ADSI 2.5 SDK 可以从 Microsoft ADSI 网址 http://www.microsoft.com/adsi 下载 。 SDK 包括文档、在线帮助和很多例子,不过不幸的是这些例子都是针对 VB 和 VC 的,这里我们将演示如何使用 Delphi 调用 ADSI 。

程序演示

图 1.111 所示的程序演示了如何调用 WinNT provider 提供的功能。演示程序用来连接到一个域,一旦连接到域,程序将会列出在 PDC 上找到的 NT 的用户和组以及域中的计算机。同时这个程序还演示了如何察看域中计算机上的服务和察看、添加、删除 NT 组中的用户。

使用 ADSI 控制 Windows NT/2000

ADSI 可以使我们控制用户、组、计算机、文件共享、打印任务、打印队列和服务等系统资源。要想在 Delphi 中调用 ADSI ,需要引入活动目录类型库,调用菜单 Project | Import Type Library 命令,选择 ActiveDs (Version 1.0) 点确认, Delphi 会生成相应的封装文件。

绑定 Win NT 目录服务

连接 Win NT 目录服务就是找到域控制器然后绑定到相应的对象上。绑定可以通过 ADsGetObject 或 ADsOpenObject 函数来实现。 ADsGetObject 函数声明如下:

function ADsGetObject(lpszPathName: PWideChar; const riid: TIID; out obj): HResult; stdcall; external 'activeds.dll';

第一个参数是对象的路径名,第二个参数是对象的接口标识符,第三个参数用于返回得到的被请求的接口指针。缺省条件下,函数根据当前用户进行安全认证。

ADsOpenObject 函数在不同的安全认证机制下绑定 ADSI 对象,它主要是通过调用参数返回的用户名和口令来认证的。函数声明如下:

function ADsOpenObject(lpszPathName: PWideChar; lpszUserName: PWideChar; lpszPassword: PWideChar; dwReserved: LongInt; const riid: TIID; out obj): HResult; stdcall; external 'activeds.dll';

第一个参数意义同上,第二、三个参数是调用者提供的用户名和口令,第四个参数是一个保留的 provider 标识,用来确定绑定的认证方法,第五个参数是请求接口的接口标识符,最后一个参数用来返回请求的接口指针。

第一个函数使用登录用户缺省的信任级别,而第二个函数允许开发者指定特殊的安全信任机制来绑定 ADSI 对象。下面代码演示了两种不同的绑定方式:

procedure TMainFrm.actOpenWinNTExecute(Sender: TObject);

var

UnknownObject: IUnknown;

DomainPath: WideString;

Domain: IADsContainer;

begin

// 指定域路径

DomainPath := 'WinNT://' + ADSIDomainName.Text;

// 如果使用用户登录了信息

if cbUseLogin.Checked then

// 使用用户登录的信息创建域对象

OleCheck(AdsOpenObject(PWideChar(DomainPath),

PWideChar(ADSIUsername.Text),

PWideChar(ADSIPassword.Text), 0, IID_IADsContainer,

UnknownObject));

else

OleCheck(ADsGetObject(PWideChar(DomainPath),

IID_IADsContainer, UnknownObject));

// 设定域对象

Domain := UnknownObject as IADsContainer;

// 从域中获得信息列表

GetDomainInformation(Domain);

end;

下面我们需要声明三个变量 :

第一个是接口变量 , 用来绑定由指定的对象路径返回的函数。

UnknownObject: IUnknown;

第二个参数是 WideString 类型的变量 , 用来在绑定函数中产生一个对象路径。

DomainPath: WideString;

第三是一个 IADsContainer 接口类型变量 , 用来保存返回的接口变量。

Domain: IADsContainer;

IADsContainer 变量将被用来从指定的 ADSI 对象中获得全部用户、组和计算机。当然也可以使用 IADsDomain 类型的变量,但它不适合枚举域中的子对象。

下面指定想要获得的对象路径 , 如果域名是 "PRISMA" , 要想获得 ADSI 对象 , 就需要指定路径为 "WinNT://PRISMA" :

// 设定域名路径


共4页: 上一页 1 [2] [3] [4] 下一页
 
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·升级windows 2003 sp2时提示产品
·win 2003最新优化大全
·win2003设置受限用户有关机权限
·windows 2003 优化大全
·Windows 2003 Server提速优化
·Windows2003安全事件ID列表
·Windows 2003 服务器管理经验
·windows 2003 简化
·windows 2003在线升级补丁
·设置win2003 自动登录
·突破IIS连接数限制,Windows 200
·释放内存win2003内存
  相关文章
·活动目录的功用
·有关活动目录的常见问答
·Windows 2000 Advanced Server中
·谈谈Site在活动目录中的应用
·谈谈DNS在活动目录中的应用
·Windows 2000活动目录逻辑结构
·通过.NET Framework访问活动目录
·通过.NET Framework访问活动目录
·Windows 2000用户管理--活动目录
·windows 2000中的活动目录
·Windows2003中对域控制器重命名
·windows 2003 简化
  主题推广
方舟网络 版权所有|关于本站|隐私保护|