AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

NetUserEnum die 2.

Ein Thema von CalganX · begonnen am 7. Feb 2003 · letzter Beitrag vom 21. Apr 2012
Antwort Antwort
Seite 2 von 4     12 34   
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#11
  Alt 7. Feb 2003, 14:11
Ätsch, Bätsch ausgetrickst. Wenn ich
inc(integer(aWorkBuffer), sizeOf(PUSERINFO0)); mache gibts kein Problem, aber nachdem ich nun einfach
inc(aWorkBuffer); {oder} inc(integer(aWorkBuffer)); mache, dann gibts ne' AccessViolation...

Chris
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#12
  Alt 7. Feb 2003, 14:12
Moin Chris,

nein, muss es nicht.

So hab' ich das gemacht

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; external 'netapi32.dll';

function NetApiBufferFree(const pBuffer : Pointer): NET_API_STATUS; stdcall; external 'netapi32.dll';


procedure TfrmMAIN.miFileOpenClick(Sender: TObject);

var
  rui0Work : PUSER_INFO_0;
  rui0Save : PUSER_INFO_0;
  dwEntriesRead : DWORD;
  i : integer;
begin
  if NetUserEnum(nil, 0, FILTER_NORMAL_ACCOUNT, @rui0Work, MAX_PREFERRED_LENGTH,
                 dwEntriesRead, dwEntriesRead, nil) = NERR_SUCCESS then begin
    rui0Save := rui0Work;
    for i:=1 to dwEntriesRead do
    begin
      ListBox1.Items.Add(rui0Work.usri0_name);
      [color=red]inc(rui0Work);[/color]
    end;
  end;
  NetAPIBufferFree(rui0Save);
end;
und es funktioniert einwandfrei.

(Ich hab' sogar mal die Funktionsdeklarationen benutzt, wie es die Jedis machen)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#13
  Alt 7. Feb 2003, 14:16
HILFE!!!! Ich drehe hier noch durch. Also, wenn ich das mache, was du gemacht hast, dann kommt:
Zitat:
[Error] UserInfo.pas(20): Types of actual and formal var parameters must be identical
Allerdings ist bei mir bufptr mit var versehen und so steht es auch bei den Jedis...

Chris
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#14
  Alt 7. Feb 2003, 14:17
Moin Luckie,

dann nimm meinetwegen die Jedi Units:

Delphi-Quellcode:
procedure TfrmMAIN.miFileOpenClick(Sender: TObject);

type
  PUserInfo0 = ^TUserInfo0;
  _USER_INFO_0 = record
    usri0_name: LPWSTR;
  end;
  TUserInfo0 = _USER_INFO_0;
  USER_INFO_0 = _USER_INFO_0;

var
  rui0Work : PUserInfo0;
  rui0Save : PUserInfo0;
  dwEntriesRead : DWORD;
  i : integer;
begin
  if NetUserEnum(nil, 0, FILTER_NORMAL_ACCOUNT, @rui0Work, MAX_PREFERRED_LENGTH,
                 dwEntriesRead, dwEntriesRead, nil) = NERR_SUCCESS then begin
    rui0Save := rui0Work;
    for i:=1 to dwEntriesRead do
    begin
      ListBox1.Items.Add(rui0Work.usri0_name);
      inc(rui0Work);
    end;
  end;
  NetAPIBufferFree(rui0Save);
end;
Mein Methode funktioniert trotzdem
(Auch ohne die Jedi Deklarationen anzufassen)
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#15
  Alt 7. Feb 2003, 14:22
Also, nochmal *wimmer*:
Delphi-Quellcode:
procedure ListAllUsers(hTreeView: DWORD; hMasterParent: Cardinal; var iEntriesRead: Cardinal);
var
  aTempIStruct: TTVInsertStruct;
  aUserBuffer, aWorkBuffer: PUSERINFO0;
  dwEntriesRead: Cardinal;
  i: integer;
  sTemp: string;
begin
  aTempIStruct.item.mask := TVIF_TEXT;
{27 =>}  if NetUserEnum(nil, 0, FILTER_NORMAL_ACCOUNT, @aUserBuffer{<=}, MAX_PREFERRED_LENGTH,
                 dwEntriesRead, dwEntriesRead, nil) = NERR_SUCCESS then begin
    aWorkBuffer := aUserBuffer;
    for i:=0 to dwEntriesRead-1 do begin
      aTempIStruct.hParent := Pointer(hMasterParent);
      sTemp := {PUserInfo0(}aWorkBuffer{)^}.usri0_name;
      aTempIStruct.item.pszText := @sTemp[1];
      SendMessage(hTreeView, TVM_INSERTITEM, 0, integer(@aTempIStruct));

      inc({integer(}aWorkBuffer{), sizeOf(PUSERINFO0)});
    end;
  end;
  NetAPIBufferFree(aUserBuffer);
end;
Kommentare deswegen, dass ich alles schnell wiederrückgängig machen kann.
Nun, wenn ich das so mache (die Typen-deklarationen sind bereits in den Units drin; das gleiche, wenn ich sie reinschreibe), dann gibts den Fehler:
Zitat:
[Error] UserInfo.pas(27): Types of actual and formal var parameters must be identical
Chris
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#16
  Alt 7. Feb 2003, 14:30
Moin Chris,

könntest Du bitte auch noch mal markieren, was denn Zeile 27 ist?
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#17
  Alt 7. Feb 2003, 14:32
Das ist die Zeile in der @aUserBuffer steht. Und an der Stelle steht auch der Cursor... Markieren kann ich auch nochmal machen

Chris
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#18
  Alt 7. Feb 2003, 14:47
Moin Chris,

ich dachte die weiter oben gepostete Funktionsdeklaration stamme aus den Jedi Headern, aber die sieht ja so aus:

Delphi-Quellcode:
function NetUserEnum(servername: LPCWSTR; level: DWORD; filter: DWORD;
 var {<=== VAR statt CONST} bufptr: Pointer; prefmaxlen: DWORD; var entriesread: DWORD;
  var totalentries: DWORD; resume_handle: PDWORD): NET_API_STATUS; stdcall;
Wenn hier das var weggelassen würde, würde es auch gehen.

Ersatzweise musst Du für @aUserBuffer Pointer(aUserBuffer) schreiben, dann geht's.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#19
  Alt 7. Feb 2003, 16:50
OK. Aber es wäre theoretisch möglich, die Methode von Luckie (2. Source, der anfängt mit "Nach ein paar Unterredungen in ICQ ist folgendes herausgekommen:") zu nutzen, richtig? Denn dann würde ich doch diese Methode nehmen, da diese diejenige ist, dir mir derzeit am ehesten zusagt.

Chris
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.105 Beiträge
 
Delphi 11 Alexandria
 
#20
  Alt 7. Feb 2003, 17:35
Moin Chris,

den hab' ich jetzt zwar nicht ausprobiert, bin aber der Meinung, dass der natürlich auch gehen würde.
Wann man den Typecast nun macht spielt ja keine Rolle.
Ich find's halt nur einfacher und übersichtlicher den nur einmal zu machen, statt öfter.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:14 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz