Hallo zusammen,
ich versuche mich gerade daran, die Gruppenmitgliedschaften von einem User lokal und in der Domain auszulesen. Nur leider komme ich irgendwie nicht weiter.
Hier mal der Code :
Delphi-Quellcode:
type
GROUP_USERS_INFO_0 = record
grui0_name : LPWSTR;
end;
PGROUP_USERS_INFO_0 = ^GROUP_USERS_INFO_0;
LOCALGROUP_USERS_INFO_0 = record
lgrui0_name : LPWSTR;
end;
PLOCALGROUP_USERS_INFO_0 = ^LOCALGROUP_USERS_INFO_0;
const
MAX_PREFERRED_LENGTH = DWORD(-1);
NERR_Success = 0;
function NetUserGetGroups(ServerName : LPWSTR; UserName : LPWSTR; Level : DWORD;
var Buf : PByte; PrefMaxLen : DWORD; var EntriesRead : DWORD;
var TotalEntries : DWORD ) : DWORD; stdcall; external 'netapi32.dll';
function NetUserGetLocalGroups(ServerName : LPWSTR; UserName : LPWSTR; Level : DWORD;
var Buf : PByte; PrefMaxLen : DWORD; var EntriesRead : DWORD;
var TotalEntries : DWORD ) : DWORD; stdcall; external 'netapi32.dll';
function NetApiBufferFree( Buffer : Pointer ) : DWORD; stdcall; external 'netapi32.dll';
procedure TForm7.Button1Click(Sender: TObject);
var
dwEntriesRead, dwEntriesTotal: DWORD;
lgi01, lgi02 : PByte;
i : Integer;
begin
lgi02 := nil;
Form7.Cursor := crHourGlass;
Listbox1.Clear;
if NetUserGetGroups(PWideChar(Edit1.Text), PWideChar(Edit2.Text), 0, lgi01, MAX_PREFERRED_LENGTH, dwEntriesRead, dwEntriesTotal) = NERR_SUCCESS then
begin
lgi02 := lgi02;
for i := 0 to dwEntriesRead - 1 do
begin
Listbox1.Items.Add(PGROUP_USERS_INFO_0(lgi01)^.grui0_name);
Inc(Integer(lgi01), SizeOf(Pointer));
end;
end;
NetAPIBufferFree(lgi02);
Form7.Cursor := crDefault;
end;
procedure TForm7.Button2Click(Sender: TObject);
var
dwEntriesRead, dwEntriesTotal: DWORD;
lgi01, lgi02 : PByte;
i : Integer;
begin
lgi02 := nil;
Form7.Cursor := crHourGlass;
Listbox1.Clear;
if NetUserGetLocalGroups(PWideChar(Edit1.Text), PWideChar(Edit2.Text), 0, lgi01, MAX_PREFERRED_LENGTH, dwEntriesRead, dwEntriesTotal) = NERR_SUCCESS then
begin
lgi02 := lgi02;
for i := 0 to dwEntriesRead - 1 do
begin
Listbox1.Items.Add(PLOCALGROUP_USERS_INFO_0(lgi01)^.lgrui0_name);
Inc(Integer(lgi01), SizeOf(Pointer));
end;
end;
NetAPIBufferFree(lgi02);
Form7.Cursor := crDefault;
end;
In der Procedure Button2Click bekomme ich die folgende Fehlermeldung :
---------------------------
Benachrichtigung über Debugger-Problem
---------------------------
In Projekt .\build\Project8.exe trat ein Problem mit folgender Meldung auf: '
access violation at 0x597e615c: read of address 0xffffffff'. Prozess angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
---------------------------
OK
---------------------------
Beim Debuggen ist mir aufgefallen, dass diese Fehlermeldung erst in der Zeile 56 kommt. Warum ist das so ? Was habe ich falsch gemacht ?