線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3319
推到 Plurk!
推到 Facebook!

如何取得 Win2000 AD 內使用者的相關資訊?

答題得分者是:chiehmin
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-04-15 14:03:45 IP:210.64.xxx.xxx 未訂閱
在站上查到「使用Delphi讀取NT或2000的帳號及密碼做認證」的方法後,覺得這個功能超好用的,不用自已管理帳號密碼,真好 ^_^ 但是、接下來就是想要從 NT網域伺服器 or AD 裡取得User的相關資料,例如:使用者的姓名、部門、說明.... 等等的欄位資訊. 是否有高手能分享心得 or 函式 ? 先謝謝囉 ~
chiehmin
高階會員


發表:13
回覆:134
積分:134
註冊:2002-05-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-04-15 14:14:28 IP:61.221.xxx.xxx 未訂閱
http://delphi.ktop.com.tw/topic.php?topic_id=21708
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-04-16 09:51:51 IP:210.64.xxx.xxx 未訂閱
謝謝您的快速回答. 您所提的方式是取得網域內所有的使用者資料. 雖然將您的程式碼抄來用,但還是看不懂 @_@ 是否能麻煩您給我一個範例,是以UserID取得相關資訊. 像是: function GetUserComment(UserID,ServerName: String): String; 以這樣的方式取得. 我以後想寫的是 function GetUserInfo(UserID,ServerName: String;Infotype): String; 其中 InfoType: 0 : name 1 : home_dir 2 : comment .........
chiehmin
高階會員


發表:13
回覆:134
積分:134
註冊:2002-05-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-04-16 10:11:56 IP:61.221.xxx.xxx 未訂閱
參考上例... 修改getUsersName function    For迴圈裡改成
      If Info.usri3_name = UserId then
      begin
        Result = Info.usri3_comment;
        break;
      end;
這樣應該就可以了...
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-04-17 18:33:48 IP:61.216.xxx.xxx 未訂閱
再次謝謝您的回答. 只是,這樣等於是將整個資料表讀出再逐一檢查(Scan Table) 有更直接的方式嗎 ? (希望能像是 SQL 一樣,直接得到需要的那筆資料) 是否能修改下面這行指令、直接取得指定帳號的資料? NetUserEnum(FD, 0, 0, Ptr, 256 * Integer(Total), Count, Total, Resume);
chiehmin
高階會員


發表:13
回覆:134
積分:134
註冊:2002-05-23

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-04-17 20:54:29 IP:211.75.xxx.xxx 未訂閱
試試這個...    
function NetUserGetInfo(ServerName:PWideChar;UserName:PWideChar;Level:DWORD;var Buf:Pointer):Longint;stdcall;external 'netapi32.dll' Name 'NetUserGetInfo';
function NetApiBufferFree(Buff: Pointer):Integer;stdcall;external 'netapi32.dll' Name 'NetApiBufferFree';    function GetUserInfo(Server, User: String): String;
var
  UserInfo : PUSER_INFO_3;
  lpwUser  : Array[0..255] Of WideChar;
  lpwSrv   : Array[0..255] Of WideChar;
begin
  StringToWideChar(Server, lpwSrv, SizeOf(lpwSrv));
  StringToWideChar(User, lpwUser, SizeOf(lpwUser));      NetUserGetInfo(lpwSrv,lpwUser,2,Pointer(UserInfo));      Result := UserInfo.usri3_comment;      NetApiBufferFree(UserInfo);
end;
jaya
初階會員


發表:9
回覆:70
積分:30
註冊:2002-05-22

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-04-18 14:16:29 IP:210.64.xxx.xxx 未訂閱
感恩呀~ 就是這個啦 !    不過、不能有錯誤發生. 例如:主機名稱 or 使用者帳號有問題的時候,就會出現存取違規. 這個簡單,這樣就行啦.
function GetUserInfo(Server, User: String): String;
var
   UserInfo : PUSER_INFO_3;
   lpwUser : Array[0..255] Of WideChar;
   lpwSrv : Array[0..255] Of WideChar;
begin
   StringToWideChar(Server, lpwSrv, SizeOf(lpwSrv));
   StringToWideChar(User, lpwUser, SizeOf(lpwUser));
   try
      NetUserGetInfo(lpwSrv,lpwUser,2,Pointer(UserInfo));
      Result := UserInfo.usri3_full_name;
   except
      Result := '';
   end; 
不過,還是沒有群組的資料. 像是:取得網域內所有的群組的名稱、取得指定帳號所屬的所有群組、變更使用者密碼.... 呵 ~ 問得越來越多、希望您不會覺得煩.
chiehmin
高階會員


發表:13
回覆:134
積分:134
註冊:2002-05-23

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-04-18 14:43:25 IP:61.221.xxx.xxx 未訂閱
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/netmgmt/netmgmt/network_management_functions.asp 參考上面的資料.. NetGroupAdd NetGroupAddUser NetGroupDel NetGroupDelUser NetGroupEnum NetGroupGetInfo NetGroupGetUsers NetGroupSetInfo NetGroupSetUsers 這些都是關於群組的設定及取得資訊.. 寫法和宣告都大同小異.. 試試吧...
系統時間:2024-05-06 0:14:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!