Einzelnen Beitrag anzeigen

Benutzerbild von x000x
x000x

Registriert seit: 21. Jan 2004
Ort: Bei Hamburg
308 Beiträge
 
Delphi XE2 Professional
 
#3

Re: LsaAddAccountRights schlägt fehl

  Alt 16. Nov 2005, 22:48
Moin moin,

@Luckie:
Also ich habe verzweifelt gesucht, deine funktionen sind auf den ersten Blick genau die gewesen,
wie die von Colin Wilson... nur mit dem Unterschied, dass seine Komponente bei mir
einwandfrei funktioniert, dagegen dein Testprogramm den von dir beschriebenen Fehler verursacht.
Wie gesagt, auf den ersten Blick... Nach ca. 20 Blicken und debuggen ist mir dann doch ein Unterschied aufgefallen.
In der Unit lsaapi.pas von CW sieht der constructor von TLsaUnicodeStr wie folgt aus:
Delphi-Quellcode:
constructor TLsaUnicodeStr.CreateFromStr (const st : string);
var
  len : Integer;
  wst : WideString;
begin
  len := Length (st);
  Value.Length := (len + 0) * sizeof (WideChar);
// Value.MaximumLength := (GUIDSTR_MAX + 5) * SizeOf (WideChar);
  Value.MaximumLength := (len + 1) * sizeof (WideChar);
  GetMem (Value.buffer, sizeof (WideChar) * (len + 1));
  wst := st;
  lstrcpyw (Value.buffer, PWideChar (wst))
end;
In deinem angehängten Bsp. Source wurde unter anderem folgende Zeilen geändert:
  Value.Length := (len + 1) * sizeof (WideChar);
Zitat von PSDK:
Length
Specifies the length, in bytes, of the string pointed to by the Buffer member, not including the terminating null character, if any.
Somit wäre nach meinem Verständnis der Source von CW völlig korrekt. Wenn du also die
korrekte Länge setzt, funktioniert auch dein Bsp. Programm.
Peter
-= Gruss Peter =-
-= alias x000x =-
  Mit Zitat antworten Zitat