全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:4127
推到 Plurk!
推到 Facebook!

如何抓取 NT/WIN2000 上的使用者名單

答題得分者是:chiehmin
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#1 引用回覆 回覆 發表時間:2002-10-01 11:27:00 IP:210.201.xxx.xxx 未訂閱
請教各位高手,DELPHI要如何抓取 NT/WIN2000上的使用者名單,謝謝
chiehmin
高階會員


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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2002-10-03 17:45:29 IP:61.221.xxx.xxx 未訂閱
type USER_INFO_0=packed record usri0_name:PWideChar; end; type PUSER_INFO_0=^USER_INFO_0; .. .. .. .. function NetUserEnum(ServerName:PWideChar;Level:DWORD;Filter:DWORD;var Buf:Pointer;PrefMaxLen:DWORD; var EntriesRead:PDWord;var TotalEntries:PDWord;var ResumeHandle:PDWord):Longint;stdcall;external 'netapi32.dll' Name 'NetUserEnum'; .. .. .. .. function getUsersName(ServerName: String): String; var Ptr:Pointer; Total:PDWord; Count:PDWord; Resume:PDWord; Info:PUSER_INFO_0; I:Integer; FD:Array[0..255] Of WideChar; begin Result := ''; FError := 0; Resume := nil; StringToWideChar(sname, FD, SizeOf(FD)); NetUserEnum(FD, 0, 0, Ptr, 0, Count, Total, Resume); FError := NetUserEnum(FD, 0, 0, Ptr, 256 * Integer(Total), Count, Total, Resume); If FError = 0 Then Begin Info := PUSER_INFO_0(Ptr); For I := 1 To DWord(Count) Do Begin Result := Result Info.usri0_name ', '; Inc(Info); End; End; end;
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2002-10-03 18:31:48 IP:210.201.xxx.xxx 未訂閱
首先謝謝您的回答,但真不好意思,我功力尚淺,我該如何將您的程式寫入我的程式內去執行呢
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#4 引用回覆 回覆 發表時間:2002-10-04 08:29:22 IP:210.201.xxx.xxx 未訂閱
抱歉,我已知道怎麼執行了,但是我想抓詳細的資訊要如何做呢?
chiehmin
高階會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2002-10-04 08:42:51 IP:61.221.xxx.xxx 未訂閱
把 _USER_INFO_0 改成 _USER_INFO_3    typedef struct _USER_INFO_3 {     LPWSTR    usri3_name;     LPWSTR    usri3_password;     DWORD     usri3_password_age;     DWORD     usri3_priv;     LPWSTR    usri3_home_dir;     LPWSTR    usri3_comment;     DWORD     usri3_flags;     LPWSTR    usri3_script_path;     DWORD     usri3_auth_flags;     LPWSTR    usri3_full_name;     LPWSTR    usri3_usr_comment;     LPWSTR    usri3_parms;     LPWSTR    usri3_workstations;     DWORD     usri3_last_logon;     DWORD     usri3_last_logoff;     DWORD     usri3_acct_expires;     DWORD     usri3_max_storage;     DWORD     usri3_units_per_week;     PBYTE     usri3_logon_hours;     DWORD     usri3_bad_pw_count;     DWORD     usri3_num_logons;     LPWSTR    usri3_logon_server;     DWORD     usri3_country_code;     DWORD     usri3_code_page;     DWORD     usri3_user_id;     DWORD     usri3_primary_group_id;     LPWSTR    usri3_profile;     LPWSTR    usri3_home_dir_drive;     DWORD     usri3_password_expired; }USER_INFO_3, *PUSER_INFO_3, *LPUSER_INFO_3;    將上述依樣宣告成Delphi的型式..再把程式裡相關的地方都改成相對應就應該就可以了..    
引言: 抱歉,我已知道怎麼執行了,但是我想抓詳細的資訊要如何做呢?
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#6 引用回覆 回覆 發表時間:2002-10-08 10:36:20 IP:210.201.xxx.xxx 未訂閱
真抱歉,我不知如何把它轉成 Delphi 的型態,能否教教我 
chiehmin
高階會員


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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2002-10-09 09:10:04 IP:61.221.xxx.xxx 未訂閱
type USER_INFO_3=packed record usri3_name: PWideChar; usri3_password: PWideChar; usri3_password_age: PDWord; usri3_priv: PDWord; usri3_home_dir: PWideChar; usri3_comment: PWideChar; usri3_flags: PDWord; usri3_script_path: PWideChar; usri3_auth_flags: PDWord; usri3_full_name: PWideChar; usri3_usr_comment: PWideChar; usri3_parms: PWideChar; usri3_workstations: PWideChar; usri3_last_logon: PDWord; usri3_last_logoff: PDWord; usri3_acct_expires: PDWord; usri3_max_storage: PDWord; usri3_units_per_week: PDWord; usri3_logon_hours: PByte; usri3_bad_pw_count: PDWord; usri3_num_logons: PDWord; usri3_logon_server: PWideChar; usri3_country_code: PDWord; usri3_code_page: PDWord; usri3_user_id: PDWord; usri3_primary_group_id: PDWord; usri3_profile: PWideChar; usri3_home_dir_drive: PWideChar; usri3_password_expired: PDWord; end; type PUSER_INFO_3=^USER_INFO_3;
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#8 引用回覆 回覆 發表時間:2002-10-09 18:03:59 IP:210.201.xxx.xxx 未訂閱
不好意思,請問一下,如果我想抓詳細資訊是否語法如下 Result := Result Info.usri3_name ',' Info.usri3_password ',' Info.usri3_password_age ',' Info.usri3_comment; 但我這樣寫會出現錯誤訊息耶,不知要如何寫
chiehmin
高階會員


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

發送簡訊給我
#9 引用回覆 回覆 發表時間:2002-10-10 09:31:18 IP:61.221.xxx.xxx 未訂閱
是什麼錯誤????    
引言: 不好意思,請問一下,如果我想抓詳細資訊是否語法如下 Result := Result Info.usri3_name ',' Info.usri3_password ',' Info.usri3_password_age ',' Info.usri3_comment; 但我這樣寫會出現錯誤訊息耶,不知要如何寫
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#10 引用回覆 回覆 發表時間:2002-10-11 08:19:59 IP:210.201.xxx.xxx 未訂閱
錯誤訊息如下 ProjectProject1.exe raised exception class EAccessViolation with message 'Access violation at address 00403AA3 in module' Project1.exe '.Read of address BAADF00D'.Process stoppped.Use Step or Run to continue.
chiehmin
高階會員


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

發送簡訊給我
#11 引用回覆 回覆 發表時間:2002-10-16 14:05:39 IP:61.221.xxx.xxx 未訂閱
紅字部份別忘了改~~~    function getUsersName(ServerName: String): String; var Ptr:Pointer; Total:PDWord; Count:PDWord; Resume:PDWord; Info:PUSER_INFO_3; I:Integer; FD:Array[0..255] Of WideChar; begin Result := ''; FError := 0; Resume := nil; StringToWideChar(ServerName, FD, SizeOf(FD)); NetUserEnum(FD, 3, 0, Ptr, 0, Count, Total, Resume); FError := NetUserEnum(FD, 3, 0, Ptr, 256 * Integer(Total), Count, Total, Resume); If FError = 0 Then Begin Info := PUSER_INFO_3(Ptr); For I := 1 To DWord(Count) Do Begin Result := Result Info.usri3_name ', '; Inc(Info); End; End; end;
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#12 引用回覆 回覆 發表時間:2002-10-17 14:44:59 IP:210.201.xxx.xxx 未訂閱
真抱歉,還是不行,我將我的程式碼貼上來請您看一下,那裡錯了,謝謝! unit Unit1; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Button1: TButton; ListBox1: TListBox; procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} type USER_INFO_3 = packed record usri3_name : PWideChar; usri3_password : PWideChar; usri3_password_age: PDWord; usri3_priv: PDWord; usri3_home_dir: PWideChar; usri3_comment: PWideChar; usri3_flags: PDWord; usri3_script_path: PWideChar; usri3_auth_flags: PDWord; usri3_full_name: PWideChar; usri3_usr_comment: PWideChar; usri3_parms: PWideChar; usri3_workstations: PWideChar; usri3_last_logon: PDWord; usri3_last_logoff: PDWord; usri3_acct_expires: PDWord; usri3_max_storage: PDWord; usri3_units_per_week: PDWord; usri3_logon_hours: PByte; usri3_bad_pw_count: PDWord; usri3_num_logons: PDWord; usri3_logon_server: PWideChar; usri3_country_code: PDWord; usri3_code_page: PDWord; usri3_user_id: PDWord; usri3_primary_group_id: PDWord; usri3_profile: PWideChar; usri3_home_dir_drive: PWideChar; usri3_password_expired: PDWord; end; type PUSER_INFO_3 = ^USER_INFO_3; function NetUserEnum(ServerName:PWideChar;Level:DWORD;Filter:DWORD;var Buf:Pointer;PrefMaxLen:DWORD; var EntriesRead:PDWord;var TotalEntries:PDWord;var ResumeHandle:PDWord):Longint;stdcall;external 'netapi32.dll' Name 'NetUserEnum'; function getUsersName(ServerName: String): String; var Ptr:Pointer; Total:PDWord; Count:PDWord; Resume:PDWord; Info:PUSER_INFO_3; I,FError:Integer; FD:Array[0..255] Of WideChar; begin FError := 0; Resume := nil; StringToWideChar(ServerName, FD, SizeOf(FD)); NetUserEnum(FD, 3, 0, Ptr, 0, Count, Total, Resume); FError := NetUserEnum(FD, 3, 0, Ptr, 256 * Integer(Total), Count, Total, Resume); If FError = 0 Then Begin Info := PUSER_INFO_3(Ptr); For I := 1 To DWord(Count) Do Begin Result := Result Info.usri3_name ',' Info.usri3_password; Inc(Info); End; End; end; procedure TForm1.Button1Click(Sender: TObject); begin getUsersName('IBM'); end; end.
chiehmin
高階會員


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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2002-10-17 16:02:17 IP:61.221.xxx.xxx 未訂閱
kwon您程式在我這邊試不會出現任何錯誤訊息囉.....可以很正確的使用..
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#14 引用回覆 回覆 發表時間:2002-10-17 16:48:17 IP:210.201.xxx.xxx 未訂閱
我使用 getUsersName('IBM'), 傳一個電腦名稱如 IBM 進去,會什麼都沒有,但若傳一個空字串如 getUsersName('') ,這樣的話它預設值是會抓本身自己電腦 USER 帳號,這樣的話就會出現錯誤 因為我想抓網域伺服器的使用者名單 發表人 - kwon 於 2002/10/17 16:51:36
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#15 引用回覆 回覆 發表時間:2002-10-17 17:07:56 IP:210.201.xxx.xxx 未訂閱
抱歉,現在又沒有問題了,不知道什麼原因?1?!?!?!?!?,再請問,這個程式只能抓本身電腦的帳號,若要抓 PDC Server 的帳號,又要如何做呢?
chiehmin
高階會員


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

發送簡訊給我
#16 引用回覆 回覆 發表時間:2002-10-17 17:20:10 IP:61.221.xxx.xxx 未訂閱
SererName就是傳入主機名稱... 這個程式不是只有抓本身電腦帳號.. 假設你有A, B, C三台主機..名稱分別為A1, B1, C1 你要抓A1裡的帳號就是getUsersName('A1')..以此類推...    
引言: 抱歉,現在又沒有問題了,不知道什麼原因?1?!?!?!?!?,再請問,這個程式只能抓本身電腦的帳號,若要抓 PDC Server 的帳號,又要如何做呢?
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#17 引用回覆 回覆 發表時間:2002-10-17 17:48:16 IP:210.201.xxx.xxx 未訂閱
我有試過傳入一個電腦名稱,但是它的 FERROR= 2351,所以傳回空值
chiehmin
高階會員


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

發送簡訊給我
#18 引用回覆 回覆 發表時間:2002-10-17 17:50:39 IP:61.221.xxx.xxx 未訂閱
我沒辦法囉..在我這邊我抓每一台電腦都能順利成功.. 看看還有沒有其它高手知道你的問題是為什麼囉.....        NERR_Success                      0          No errors encountered.     ERROR_ACCESS_DENIED                      5          The user has insufficient                                           privilege for        this opera-                                           tion.     ERROR_NOT_SUPPORTED                     50          This network request is                                           not supported.     ERROR_BAD_NETPATH                     53          The network path was not                                           found.     ERROR_NETWORK_ACCESS_DENIED             65          Network access is denied.     ERROR_INVALID_LEVEL                    124          Invalid level        parameter.     ERROR_MORE_DATA                    234          More data available,                                           buffer too small.     NERR_RemoteOnly                   2106          This operation can be                                           performed only on a                                           server.     NERR_WkstaNotStarted           2138          The Workstation service                                           is not started.     NERR_BadTransactConfig           2141          The server is        not config-                                           ured for this        transac-                                           tion;         IPC$ is not                                           shared.     NERR_InvalidDatabase           2247          The user accounts data-                                           base file is corrupted.     NERR_InvalidComputer           2351 Invalid computername specified.
引言: 我有試過傳入一個電腦名稱,但是它的 FERROR= 2351,所以傳回空值
發表人 - chiehmin 於 2002/10/17 18:04:09
gavinj123
初階會員


發表:88
回覆:48
積分:27
註冊:2002-10-15

發送簡訊給我
#19 引用回覆 回覆 發表時間:2002-10-17 18:25:31 IP:211.75.xxx.xxx 未訂閱
我照著上面kwon兄貼的程式執行,抓的到usename可是抓不到password??? 而且抓不到我目前正在使用的這個帳號 發表人 - gavinj123 於 2002/10/17 18:30:22
chiehmin
高階會員


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

發送簡訊給我
#20 引用回覆 回覆 發表時間:2002-10-17 18:32:42 IP:61.221.xxx.xxx 未訂閱
password是抓不到的.....    
引言: 我照著上面kwon兄貼的程式執行,抓的到usename可是抓不到password??? 而且抓不到我目前正在使用的這個帳號 發表人 - gavinj123 於 2002/10/17 18:30:22
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#21 引用回覆 回覆 發表時間:2002-10-17 18:39:15 IP:210.201.xxx.xxx 未訂閱
請問一下,在抓別台電腦的使用者名單時,該電腦不會出現視窗要您填入帳號及密碼嗎?
kwon
一般會員


發表:14
回覆:64
積分:22
註冊:2002-08-08

發送簡訊給我
#22 引用回覆 回覆 發表時間:2002-10-17 19:25:06 IP:210.201.xxx.xxx 未訂閱
請問一下,為何陣列 FD 的內容將 IBM 拆成三個,如 'I','B','M',而不是 'IBM'?     發表人 - kwon 於 2002/10/17 19:26:52
chiehmin
高階會員


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

發送簡訊給我
#23 引用回覆 回覆 發表時間:2002-10-18 08:35:31 IP:61.221.xxx.xxx 未訂閱
字元陣列存的當然是字元'I', 'B', 'M'囉...可不是嗎??
引言: 請問一下,為何陣列 FD 的內容將 IBM 拆成三個,如 'I','B','M',而不是 'IBM'? 發表人 - kwon 於 2002/10/17 19:26:52
系統時間:2024-04-26 3:48:49
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!