Hi,
entweder ich bin blöd, oder der Kompiler ist kaputt. Also, ersteinmal meine Definition der NetUserEnum aus JwaLM:
Delphi-Quellcode:
function NetUserEnum(
const servername: LPCWSTR;
const level: DWORD;
const filter: DWORD;
const bufptr: Pointer;
const prefmaxlen: DWORD;
var entriesread: DWORD;
var totalentries: DWORD;
const resume_handle: PDWORD
): NET_API_STATUS; stdcall;
Ich habe mir bereits Christian's Definition aus dem Ursprungsthread angesehen. Allerdings kann ich damit nix anfangen. Darum bitte ich euch mir hier nochmal zu helfen, denn ich steige nicht mehr durch.
Nun aber mein Source (nachdem ich alles in eine Funktion schreiben wollte, ging nix mehr):
Delphi-Quellcode:
procedure ListAllUsers(hTreeView: DWORD; hMasterParent: Cardinal; var iEntriesRead: Cardinal);
type
PUSER_INFO_0 = ^_USER_INFO_0;
// PUSER_INFO_11 = ^_USER_INFO_11; <= für später...
var
aTempIStruct: TTVInsertStruct;
aUserBuffer, aWorkBuffer: PUSER_INFO_0;
dwEntriesRead: Cardinal;
i: integer;
sTemp: string;
begin
if NetUserEnum(nil, 0, FILTER_NORMAL_ACCOUNT, @aUserBuffer, MAX_PREFERRED_LENGTH,
dwEntriesRead, dwEntriesRead, nil) = NERR_SUCCESS then begin
aWorkBuffer := aUserBuffer;
for i:=1 to dwEntriesRead do begin
aTempIStruct.hParent := Pointer(hMasterParent);
sTemp := aWorkBuffer.usri0_name;
aTempIStruct.item.pszText := @sTemp[1];
SendMessage(hTreeView, TVM_INSERTITEM, 0, integer(@aTempIStruct));
inc(aWorkBuffer, sizeOf(PUSER_INFO_0));
end;
end;
NetAPIBufferFree(aUserBuffer);
end;
So, wenn ich nun ausführe: Es gibt ne saftige AccessViolation mit folgendem Inhalt:
Code:
---------------------------
Application Error
---------------------------
Exception EAccessViolation in module OSInfo.exe at 000037C3.
Access violation at address 004037C3 in module 'OSInfo.exe'. Read of address BAADF00D.
---------------------------
OK
---------------------------
Dann wird das Programm zurückgesetzt und Ende.
Was mache ich nur falsch.
Chris