Exit;
// 指定域名路径
ComputerPath := "WinNT://"ADSIDomainName.Text"/"Item.Caption;
// 创建计算机对象
OleCheck(ADsGetObject(PWideChar(ComputerPath),
IID_IADsComputer, UnknownObject));
// 获得计算机容器接口
Computer := UnknownObject as IADsContainer;
// 清空服务视图列表
ServiceListView.Items.Clear;
// 获取枚举对象用于遍历
Enum := (Computer._NewEnum) as IEnumVariant;
// 用枚举对象进行查找
while (Enum.Next(1, ADsTempObj, Value) = S_OK) do begin
// 保存临时对象
ADsObj := IUnknown(ADsTempObj) as IADs;
// 如果对象为服务的话,添加到视图中
if AdsObj.Class_ = "Service" then
AddServiceToList(ADsObj);
end;
end.
要想获得 NT 服务的信息,需要绑定服务对应的 ADSI 对象,ADSI 提供了 IADsService 对象来维护 NT 服务的信息,下面代码演示了如何绑定 NT 服务,并显示服务名:
var
ServiceObj: IADsService;
AdsPath: WideString;
begin
// 指定域名路径
AdsPath := "WinNT://"ComputerName"/"ServiceName;
// 获得服务对象
OLECheck(ADsGetObject(PWideChar(AdsPath),
IID_IADsService, ServiceObj));
// 获得服务名
lblServiceName.Caption := " 服务名 : "ServiceName;
lblDisplayName.Caption := " 服务显示名称 : "
ServiceObj.Get_DisplayName;
要想启动或停止 NT 服务,可以使用 IADsServiceOperations ADSI 对象 。同上面一样需要先绑定到 NT 服务上去,而同前面不一样的是,这回不是获得 IADsService ADSI 对象,而是获得 IADsServiceOperations ADSI 对象:
// 创建计算机对象
OleCheck(AdsGetObject(PWideChar(AdsPath),
IID_IADsServiceOperations, Result));
然后使用 GetServiceObj 函数来绑定到 IADsServiceOperations ADSI 对象上,并返回 IADsServiceOperations 接口 :
// 获得服务对象
ServiceObj := GetServiceObj;
启动服务需要调用 IADsServiceOperations 接口的 Start 方法:
图 1.114
// 启动服务,Get_Status = 1 表明服务正处于停止状态
if ServiceObj.Get_Status = 1 then
ServiceObj.Start;
要停止服务需要调用 IADsServiceOperations ADSI 对象的 Stop 方法 , 运行结果如图 1.114 所示 。
结论
毫无疑问,通过 ADSI 目录服务,调用 WinNT provider 可以更容易实现 NT 的管理功能,但它也是一个庞大的系统,光 Windows 的活动目录编程参考就有上千页,说明我们必须花费大量时间才能真正掌握它的精髓 。
推荐阅读
- 刺客信条英灵殿探索难度选哪个
- 阴阳师三尾狐哪里打
- 深度分析Win2003自动升级补丁
- 抖音很火的结婚祝福语 有深度婚礼高端祝福语
- 深度分析Win 2003自动升级补丁功能
- 美国游记探索美国的自然景观和文化历史
- 阴阳师酒吞童子去哪刷
- 海洋从哪些方面被探索过
- 海洋从哪方面被探索过
- 什么是深度填埋