日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Delphi深度探索-活動目錄開發(fā)( 二 )


// 設定域對象
Domain := UnknownObject as IADsContainer;
// 從域中獲得信息列表
GetDomainInformation(Domain);
end;
下面我們需要聲明三個變量 :
第一個是接口變量 , 用來綁定由指定的對象路徑返回的函數(shù) 。
UnknownObject: IUnknown;
第二個參數(shù)是 WideString 類型的變量,用來在綁定函數(shù)中產生一個對象路徑 。
DomainPath: WideString;
第三是一個 IADsContainer 接口類型變量,用來保存返回的接口變量 。
Domain: IADsContainer;
IADsContainer 變量將被用來從指定的 ADSI 對象中獲得全部用戶、組和計算機 。當然也可以使用 IADsDomain 類型的變量,但它不適合枚舉域中的子對象 。
下面指定想要獲得的對象路徑,如果域名是 "PRISMA",要想獲得 ADSI 對象,就需要指定路徑為 "WinNT://PRISMA" :
// 設定域名路徑
DomainPath := "WinNT://"ADSIDomainName.Text;
下面代碼使用不同的安全認證方式:
// 如果使用登錄信息
if cbUseLogin.Checked then
// 使用登錄并創(chuàng)建域對象
OleCheck(AdsOpenObject(PWideChar(DomainPath),
PWideChar(ADSIUsername.Text),
PWideChar(ADSIPassword.Text), 0, IID_IADsContainer,
UnknownObject));
else
// 創(chuàng)建域對象
OleCheck(ADsGetObject(PWideChar(DomainPath),
IID_IADsContainer, UnknownObject));
然后我們獲取 IADsContainer 指針,以便查詢域中的子對象:
// 獲取域對象
Domain := UnknownObject as IADsContainer;
最后,把 IADsContainer 接口指針作為參數(shù)調用來獲得域中的子對象 :
GetDomainInformation(Domain);
在域中查找
要想在域中查找子對象,可以使用 GetDomainInformation 過程,代碼如下 :
// 獲取域信息
procedure TMainFrm.GetDomainInformation(
Domain: IADsContainer);
var
Enum: IEnumVariant;
ADsTempObj: OLEVariant;
ADsObj: IADs;
Value: LongWord;
begin
// 清空用戶、組和計算機列表
UserListView.Items.Clear;
GroupListView.Items.Clear;
ComputerListView.Items.Clear;
// 獲取枚舉對象
Enum := (Domain._NewEnum) as IEnumVariant;
// 利用枚舉對象查找
while (Enum.Next(1, ADsTempObj, Value) = S_OK) do begin
// 獲得臨時對象
ADsObj := IUnknown(ADsTempObj) as IADs;
// 如果是用戶對象
if AdsObj.Class_ = "User" then
AddUserToList(ADsObj);
// 如果是組對象
if AdsObj.Class_ = "Group" then
AddGroupToList(ADsObj);
// 如果是計算機對象
if AdsObj.Class_ = "Computer" then
AddComputerToList(ADsObj);
end;
end;
下面是對程序流程的詳細說明,首先獲得枚舉對象,并賦值給 Enum 變量:
Enum := (Domain._NewEnum) as IEnumVariant;
然后利用枚舉變量進行查找并把每個子對象賦值給臨時的 OLEVariant 對象:
【Delphi深度探索-活動目錄開發(fā)】while (Enum.Next(1, ADsTempObj, Value) = S_OK) do begin
OLEVariant 變量賦值給 ADSI 對象
ADsObj := IUnknown(ADsTempObj) as IADs;
獲得 ADSI 對象后,開始檢查對象類,根據對象類別把 ADSI 分別處理,并把不同 ADSI 對象的屬性添加到各自的列表視圖中去:
// 如果是用戶對象
if AdsObj.Class_ = "User" then
AddUserToList(ADsObj);
// 如果是組對象
if AdsObj.Class_ = "Group" then
AddGroupToList(ADsObj);
// 如果是計算機對象
圖 1.112
if AdsObj.Class_ = "Computer" then AddComputerToList(ADsObj);
運行結果如 圖 1.112 所示 。
創(chuàng)建或刪除計算機用戶
通過 WinNT provider,可以創(chuàng)建或刪除域中任意一臺計算機的用戶,要想創(chuàng)建一個域中指定的計算機的用戶,需要綁定到指定的計算機上 。一旦要綁定到計算機對應的 ADSI 容器對象,就需要調用 Create 方法 。容器對象的 Create 方法需要兩個參數(shù),一個是要創(chuàng)建的 ADSI 對象的類別,一個是要用來描述 ADSI 對象的名字 。調用 Create 方法后會返回新的 ADSI 對象的引用參考,下面代碼演示了如何創(chuàng)建一個用戶:

推薦閱讀