Delphi访问活动目录(使用COM,活动目录Active Directory是用于Windows Server的目录服务)
活动目录Active Directory是用于Windows Server的目录服务,它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用。Active Directory使用结构化的数据存储作为目录信息的逻辑层次结构的基础。
在某些情况下我们需要通过程序来读取Active Directory中的信息,我们可以使用微软提供的ADSI(Active Directory Services Interface)。ADSI是一组以COM接口形式提供的目录 服务,因此任何支持COM编程的语言如Delphi、VB、VC等都可以使用ADSI。
在Delphi中使用ADSI需要导入活动目录类型库,具体操作如下:在IDE中选择菜单“Project->Import Type Library”,在弹出的对话框中选择“Active Ds Type Libarary(version 1.0)”,单击“Create Unit”,Delphi会自动产生封装单元文件。只要在相应文件中引用该单元文件即可使用ADSI了。下面给出一个在Delphi6中使用ADSI访问Windows Server活动目录信息的示例代码。
unitUnit2;
interface
uses
Windows,Messages,SysUtils,Variants,Classes,Graphics,Controls,Forms,
Dialogs,ActiveDs_TLB,ActiveX,ComObj,ComCtrls,StdCtrls;
type
TForm2=class(TForm)
GroupBox1:TGroupBox;
lvGroup:TListView;
GroupBox2:TGroupBox;
lvUser:TListView;
Button1:TButton;
procedureButton1Click(Sender:TObject);
private
{Privatedeclarations}
functionGetObject(constName:String):IDispatch;
procedureEnumerateUsers(Container:IAdsContainer);
procedureAddGroupToListView(AGroup:IADsGroup);
procedureAddUserToListView(AUser:IAdsUser);
public
{Publicdeclarations}
end;
var
Form2:TForm2;
implementation
{$R*.dfm}
{TForm2}
procedureTForm2.AddGroupToListView(AGroup:IADsGroup);
begin
lvGroup.Items.Add.Caption:=AGroup.Name;
end;
procedureTForm2.AddUserToListView(AUser:IAdsUser);
begin
withlvUser.Items.Adddobegin
Caption:=AUser.FullName;
SubItems.Add(VarToStr(AUser.Get('sAMAccountName')));
end;
end;
procedureTForm2.EnumerateUsers(Container:IAdsContainer);
var
ADsObj:IADs;
Value:LongWord;
Enum:IEnumVariant;
ADsTempOjb:OleVariant;
begin
Enum:=(Container._NewEnum)asIEnumVariant;
while(Enum.Next(1,ADsTempOjb,Value)=S_OK)dobegin
ADsObj:=IUnknown(ADsTempOjb)asIADs;
try
ifSameText(ADsObj.Class_,'Group')thenbegin
AddGroupToListView(ADsObjasIADsGroup);
EnumerateUsers(ADsObjasIAdsContainer);
end
elseifSameText(ADsObj.Class_,'User')then
AddUserToListView(ADsObjasIADsUser);
except
end;
end;
end;
functionTForm2.GetObject(constName:String):IDispatch;
var
Eaten:Integer;
Moniker:IMoniker;
BindContext:IBindCtx;
begin
OleCheck(CreateBindCtx(0,BindContext));
OleCheck(MkParseDisplayName(BindContext,PWideChar(WideString(Name)),Eaten,Moniker));
OleCheck(Moniker.BindToObject(BindContext,Nil,IDispatch,Result));
end;
procedureTForm2.Button1Click(Sender:TObject);
var
Container:IADsContainer;
begin
Container:=GetObject('LDAP://OU=Suzhou,OU=root,DC=ap,DC=emersonclimate,DC=org')asIADsContainer;
lvGroup.Items.BeginUpdate;
lvUser.Items.BeginUpdate;
try
Button1.Enabled:=False;
EnumerateUsers(Container);
Button1.Enabled:=True;
finally
lvGroup.Items.EndUpdate;
lvUser.Items.EndUpdate;
end;
Container._Release;
end;
end.Delphi访问活动目录(使用COM,活动目录Active Directory是用于Windows Server的目录服务)的更多相关文章
- Delphi访问活动目录
活动目录Active Directory是用于Windows Server的目录服务,它存储着网络上各种对象的有关信息,并使该信息易于管理员和用户查找及使用.Active Directory使用结构化 ...
- windows server 2012 AD 活动目录部署系列(五)备份和还原域控制器
在前篇博文中,我们介绍了用户资源的权限分配,用户只要在登录时输入一次口令,就能访问基于该域所分配给他的所有资源. 但是我们需要考虑一个问题:万一域控制器坏了怎么办?!如果这个域控制器损坏了,那用户登录 ...
- Windows Server 2008 R2之六活动目录域服务的卸载
活动目录域服务的卸载是将DC降级为独立服务器或成员服务器的过程. 在删除活动目录之前,为了防止操作失败操作系统故障,须对系统进行备份.同时,我们还必须对待删除的域控制器进行如下检查 1.是否有操作主控 ...
- Windows Server 2008 R2之三管理活动目录数据库
活动目录数据库包括数据库文件NTDS.dit和日志文件.考虑到最佳性能,在生产环境推荐将日志文件和数据库文件在单独的硬盘驱动器中或RAID中,同时要根据网络的规模,保证磁盘上有充足的剩余空间.由于活动 ...
- Windows Server 2012之活动目录域服务的卸载
Windows Server 2012之活动目录域服务的卸载 2012-07-11 06:27:35 标签:Windows Server 2012 活动目录域服务 卸载 原创作品,允许转载,转载时请务 ...
- windows server 2012 AD 活动目录部署加入域并创建域用户(寻找视频课程)(计算机加入域其实是本计算机的管理员账号(本机名)加入域,关联账号即可在已经加入域的计算机上面登录)
windows server 2012 AD 活动目录部署加入域并创建域用户(寻找视频课程)(计算机加入域其实是本计算机的管理员账号(本机名)加入域,关联账号即可在已经加入域的计算机上面登录) 一.总 ...
- Server2012R2实现活动目录(Active Directory)双域控制器互为冗余
在活动目录中部署两台主控域控制器,两台域控制器互为冗余. Server 2012 R2新建活动目录和DC refer to: https://www.cnblogs.com/jfzhu/p/40061 ...
- windows server 2012 AD 活动目录部署系列(七)Active Directory 的授权还原
域内所有的域控制器都有一个内容相同的Active Directory,而且 Active Directory 的内容是动态平衡的,也就是说任何一个域控制器修改了 Active Directory,其他 ...
- 《UNIX环境高级编程》笔记--文件访问权限和新文件、目录所有权
1.与进程关联的用户ID和组ID 与一个进程关联的ID有一下几个: 实际用户ID和实际组ID标识我们究竟是谁.通常在一个会话间值是不会改变的,但是超级用户进程有方法改变 他们,在以后的进程控制中会进行 ...
随机推荐
- Erlang/OTP 中文手册
http://erldoc.com/ Open Telecom Platform application array asn1rt base64 binary calendar code dbg di ...
- 【rlz000】字串找数
Time Limit: 3 second Memory Limit: 2 MB 问题描述 输入一个字符串,内有数字和非数字字符.如A123X456Y7A,302ATB567BC,统计共有多少个整数, ...
- CodeBlocks 配色方案设置
最终效果(官方sublime修改版) 官方配色 codeblocks是一个功能很强大编程软件,我们在安装codeblocks后软件默认的是白底黑字界面,这种界面在长时间写代码时会对眼睛造成很大伤害,增 ...
- CentOS7 下的mysql安装与配置
之前虽然也安装过多次mysql,但每次都会遇到各种小问题,这次记录下来,以备后查. 首先是下载与安装 # wget http://dev.mysql.com/get/mysql-community-r ...
- unix shell(壳)的简单实现
用户程序通过调用操作系统提供的系统调用(system call)API 来获得操作系统提供的各种服务.但使用 API 需要手动编写程序.对于不编程序.且需要与操作系统进行交互的用户,又如何使用操作系统 ...
- 比较好的Redux和React-Redux学习资料
1.Redux 莞式教程.本教程深入浅出,配套入门.进阶源码解读以及文档注释丰满的 Demo 等一条龙服务https://github.com/kenberkeley/redux-simple-tut ...
- Arcgis api for javascript学习笔记(4.5版本) - 点击多边形(Polygon)并高亮显示
在现在的 arcgis_js_v45_api 版本中并没有直接提供点击Polygon对象高亮显示.需要实现如下几个步骤: 1.点击地图时,获取Polygon的Graphic对象: 2.对获取到的Gra ...
- misc子系统
跟着内核学框架-从misc子系统到3+2+1设备识别驱动框架 misc子系统在Linux中是一个非常简单的子系统,但是其清晰的框架结构非常适合用来研究设备识别模型.本文从misc子系统的使用出发, ...
- Java10 新特性
Java 10 新特性 这次发布的 Java 10,新带来的特性并不多. 根据官网公开资料,共有 12 个 JEP(JDK Enhancement Proposal 特性加强提议),带来以下加强功能: ...
- OpenCV For iOS 1: 连接OpenCV 3.0
本文的内容參考Instant OpenCV for iOS结合最新的开发平台完毕. 本系列文章採用的的开发环境为: 1)Xcode 6 2)OpenCV for iOS 3.0.0 alpha 接下来 ...