Hallo Freunde,
anbei ein kurzer Quelltext, um alle Benutzer des aktuellen Systems (nicht nur den angemeldeten) auszulesen:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51:
| program NetUserEnum;
{$APPTYPE CONSOLE}
uses SysUtils,Windows;
type USER_INFO_1 = record usri1_name: LPWSTR; usri1_password: LPWSTR; usri1_password_age: DWORD; usri1_priv: DWORD; usri1_home_dir: LPWSTR; usri1_comment: LPWSTR; usri1_flags: DWORD; usri1_script_path: LPWSTR; end; lpUSER_INFO_1 = ^USER_INFO_1;
function ANetUserEnum(ServerName: PWideChar; Level, Filter: DWORD; var Buffer: Pointer; PrefMaxLen: DWORD; var EntriesRead, TotalEntries, ResumeHandle: DWORD): Longword; stdcall; external 'netapi32.dll' name 'NetUserEnum';
function NetApiBufferFree(pBuffer: PByte): Longint; stdcall; external 'netapi32.dll';
var EntiesRead: DWORD; TotalEntries: DWORD; UserInfo: lpUSER_INFO_1; lpBuffer: Pointer; ResumeHandle: DWORD; Counter: Integer; NetApiStatus: LongWord;
begin ResumeHandle := 0; repeat NetApiStatus := ANetUserEnum(nil, 1, 0, lpBuffer, 0, EntiesRead, TotalEntries, ResumeHandle); UserInfo := lpBuffer;
for Counter := 0 to EntiesRead - 1 do begin Writeln(WideCharToString(UserInfo^.usri1_name) + ' --> ' + WideCharToString(UserInfo^.usri1_comment)); Inc(UserInfo); end;
NetApiBufferFree(lpBuffer); until (NetApiStatus <> ERROR_MORE_DATA); ReadLn; end. |
Funktioniert prima und ist genau das, was ich gestern so gegen 01:30 Uhr nachts haben wollte. Aber.
Dem aufmerksamen Leser fällt sicher sofort der external zu NetUserEnum auf:
Delphi-Quelltext
1: 2: 3:
| function ANetUserEnum(ServerName: PWideChar; Level, Filter: DWORD; var Buffer: Pointer; PrefMaxLen: DWORD; var EntriesRead, TotalEntries, ResumeHandle: DWORD): Longword; stdcall; external 'netapi32.dll' name 'NetUserEnum'; |
Ich mußte die Routine "ANetUserEnum" nennen und es via der
name-Direktive als "NetUserEnum" importieren. Denn im späteren Source erfolgt ja der Aufruf von NetUserEnum. Importiere ich es ohne
name-Direktive, dann wirft der Compiler einen Fehler aus:
Zitat: |
'.' erwartet, aber '(' gefunden. |
Hovert man mit der Maus über NetUserEnum, dann poppt ein Fenster auf "NetUserEnum namespace". Compiler ist Delphi 2010 Architect.
Was mache ich denn nu wieder falsch ?
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.