Einzelnen Beitrag anzeigen

Benutzerbild von Luckie
Luckie

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

LsaEnumerateAccountRights schlägt fehl

  Alt 9. Nov 2005, 19:30
Ich versuche gerade mir die Privilegien, die eine Gruppe hat auflisten zu lassen. dassieht bisher so aus:
Delphi-Quellcode:
function OpenPolicy(const Server: WideString): THandle;
var
  ObjectAttributes: TLSA_OBJECT_ATTRIBUTES;
  lusSystemName: TLSA_UNICODE_STRING;
begin
  ZeroMemory(@ObjectAttributes, sizeof(TLSA_OBJECT_ATTRIBUTES));
  lusSystemName.Buffer := PWideString(Server);
  lusSystemName.len := length(Server) * 2;
  lusSystemName.MaxLen := (length(Server) + 1) * 2;
  LsaOpenPolicy(@lusSystemName, @ObjectAttributes, POLICY_LOOKUP_NAMES, result);
end;


function GetGroupPrivileges(const Server, Group: WideString): TStringArray;
var
  PolicyHandle: THandle;
  Privileges: TLSA_UNICODE_STRING;
  Count: Cardinal;
  SID: PSID;
  ret: NTSTATUS;
  i: Integer;
begin
  GetAccountSid(Server, Group, SID);
  PolicyHandle := OpenPolicy('hal9000');
  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;
Eine gültige SID und ein gültiges PolicyHandle habe ich. Nur leider schlägt LsaEnumerateAccountRights mit der Fehlermeldung:
Zitat:
Das System kann die angegebene Datei nicht finden
fehl. Und bei manchen Gruppen bekomme ich auch eine AV in der kernel32.dll:
Zitat:
Access violation at address 77EB8E60 in module 'kernel32.dll'. Read of address 00142000.
Was mache ich also falsch?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat