Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: LookupAccountSidW und Datenbereich zu klein

  Alt 7. Mär 2007, 13:28
So hatte ich es ja auch. Aber marabu meinte hier: http://www.delphipraxis.net/internal...=691800#691800 , dass ich eine falsche Fehlermeldung bekäme, weil ich beim Ermitteln der nötigen Buffergröße den Rückgabewert der Funktion nicht auswerten würde.

Ich habe es jetzt also so:
Delphi-Quellcode:
function StrSIDToName(const StrSID: Widestring; var Name: WideString; var SIDType: DWORD): DWORD;
var
  SID : PSID;
  Buffer : PWideChar;
  NameLen, TempLen : Cardinal;
  err : Boolean;
begin
  SID := nil;
  err := ConvertStringSIDToSID(PWideChar(StrSID), SID);
  if err then
  begin
    NameLen := 0;
    TempLen := 0;
    LookupAccountSidW(nil, SID, nil, NameLen, nil, TempLen, SIDType);
    NameLen := NameLen * 2 + 1;
    GetMem(Buffer, NameLen);
    try
      err := LookupAccountSidW(nil, SID, Buffer, NameLen, nil, TempLen, SIDType);
      if err then
      begin
        SetString(Name, Buffer, Namelen);
        SetLastError(0);
      end;
    finally
      FreeMem(Buffer);
    end;
  end;
  if Assigned(SID) then
    LocalFree(Cardinal(SID));
  result := GetLastError;
end;
Aber jetzt fliege ich beim zweiten Aufruf raus und zwar ganz. Das Programm beendet sich im Debugger. Nehme ich die Ansi-Version der Funktion geht es.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat