Autor Beitrag
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 22.07.13 12:12 
Hallo Freunde,

anbei ein kurzer Quelltext, um alle Benutzer des aktuellen Systems (nicht nur den angemeldeten) auszulesen:
ausblenden volle Höhe Delphi-Quelltext
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; stdcallexternal 'netapi32.dll' name 'NetUserEnum';

function NetApiBufferFree(pBuffer: PByte): Longint; stdcallexternal '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(nil10, 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:
ausblenden Delphi-Quelltext
1:
2:
3:
function ANetUserEnum(ServerName: PWideChar; Level, Filter: DWORD;
                     var Buffer: Pointer; PrefMaxLen: DWORD;
                     var EntriesRead, TotalEntries, ResumeHandle: DWORD): Longword; stdcallexternal '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.
Hidden
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 2242
Erhaltene Danke: 55

Win10
VS Code, Delphi 2010 Prof.
BeitragVerfasst: Mo 22.07.13 12:45 
Hallo Olaf,

ich würde mal stark vermuten, dass der Name deines Programms das Problem ist: Der sollte wohl besser nicht mit dem Methodennamen übereinstimmen :)

Grüße,
Daniel

_________________
Centaur spears can block many spells, but no one tries to block if they see that the spell is a certain shade of green. For this purpose it is useful to know some green stunning hexes. (HPMoR)
OlafSt Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Mo 22.07.13 13:03 
:shock: ?!?!
:hair:
:autsch:
:flehan:

_________________
Lies, was da steht. Denk dann drüber nach. Dann erst fragen.