Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

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

Re: LsaEnumerateAccountRights schlägt fehl

  Alt 10. Nov 2005, 04:14
So, ich habe mir das jetzt mal angeguckt. Mein Code sieht jetzt so aus für die beiden Funktionen:
Delphi-Quellcode:
function OpenPolicy(const Server: WideString; var hPolicy: THandle): DWORD;
var
  ObjectAttributes : TLSA_OBJECT_ATTRIBUTES;
  lusSystemName : TLSA_UNICODE_STRING;
  Status : NTSTATUS;
begin
  ZeroMemory(@ObjectAttributes, sizeof(TLSA_OBJECT_ATTRIBUTES));
  lusSystemName.Buffer := AllocMem(lusSystemName.MaxLen);
  lusSystemName.len := length(Server) * sizeof(WideChar);
  lusSystemName.MaxLen := lusSystemName.len + sizeof(WideChar);
  FillChar(ObjectAttributes, Sizeof(TLSA_OBJECT_ATTRIBUTES), 0);
  try
    Status := LsaOpenPolicy(@lusSystemName, @ObjectAttributes, POLICY_LOOKUP_NAMES, hPolicy);
    if Status = STATUS_SUCCESS then
    begin
      result := 0;
    end
    else
    begin
      result := LsaNtStatusToWinError(Status);
    end;
  finally
    FreeMem(lusSystemName.Buffer);
  end;
end;
Und:
Delphi-Quellcode:
function GetGroupPrivileges(const Server, Group: WideString): TStringArray;
var
  PolicyHandle : THandle;
  Privileges : TLSA_UNICODE_STRING;
  Count : Cardinal;
  SID : PSID;
  ret : LongWord;
  i : Integer;
begin
  GetAccountSid(Server, Group, SID);
   ret := OpenPolicy(Server, PolicyHandle);
  if ret = 0 then
  begin
    ret := LsaEnumerateAccountRights(PolicyHandle, SID, Privileges, Count);
    if ret = 0 then
    begin
      setlength(result, Count);
      for i := 0 to Count - 1 do
      begin
        result[i] := string(Privileges.Buffer);
      end;
    end
    else
      ShowMessage(SysErrorMessage(LsaNtStatusToWinError(ret)));
  end
  else
    ShowMessage(SysErrorMessage(ret));
end;
Also OpenPolicy scheint ganz gut zu klappen nur LsaEnumerateAccountRights schlägt fehl. Entweder bekomme ich eine AV in der kernel32.dll oder die Meldung:
Zitat:
Das System kann die angegebene Datei nicht finden
Wer kann mir da noch jetzt helfen?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat