Einzelnen Beitrag anzeigen

Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#8

Re: NetLocalGroupAdd funktioniert nicht

  Alt 1. Okt 2007, 13:58
hehe, jedesmal wenn du Änderungen machst, hast du etwas geändert, was niemand gewollt hat.
Ich sehe, dass du keine Ahnung von Pointern hast und eigentlich nur ausprobierst. Such dir mal (oder frage im Forum) Tutorials
über Pointerarithmetik.

Delphi-Quellcode:
var
  info : Pointer;
Hier verwendest du plötzlich einen untypisierten Pointer. KA warum.

Delphi-Quellcode:
  parmerr : LPDWORD;
  wComment: WideString;
  wGroupName: WideString;
  nerr: Cardinal;
begin
  wComment := Edit2.Text;
  wGroupName := Edit1.Text;
  parmerr := nil;
  GetMem(info,sizeOf(PLOCALGROUP_INFO_1));
Das GetMem ist falsch. Mit "sizeOf(PLOCALGROUP_INFO_1)" bekommst du die Größe des Zeigers und nicht die der Struktur. Auf 32Bit Systemen kommt immer 4 raus.
Es sollte also LOCALGROUP_INFO_1 sein, für das 8 rauskommt.
Zudem erstellst du Speicher für Info, jedoch nicht "parmerr" was ja auch ein Pointer ist (LP... -> Long Pointer).

Delphi-Quellcode:
  PLOCALGROUP_INFO_1(info)^.lgrpi1_comment := PWideChar(wComment);
  PLOCALGROUP_INFO_1(info)^.lgrpi1_name := PWideChar(wGroupName);
  nerr := NetLocalGroupAdd(PWideChar('.'), 1, @info, parmerr);
Hier übergibst du per @-Operator einen Zeiger an die Funktion. Das bedeutet du übergibst die Speicheraddresse des Zeigers an die Funktion.Sozusagen ein Zeiger auf einen Zeiger.
Resultat: Buffer Overflow (Zugriffsverletzung im besten Fall).
Ich hab dir schon geschrieben (was du nicht gelesen oder nicht verstanden hast), dass man einfach LOCALGROUP_INFO_1 als Variablentyp nimmt und kein GetMem verwendet,
dafür die Variable mit @ der API-Funktion übergibt.
Oder, dass man PLOCALGROUP_INFO_1 mit GetMem verwendet und dafür @ nicht verwendet.
Dasselbe gilt für "parmerr".
Hättest du keinen untypisierten Zeiger für "info" verwendet, dann müsstest du kein Type-Cast machen.


Ich lege dir dringend nahe, dass du dich mit Zeigern beschäftigen solltest, bevor du weitermachst.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat