Forum: Win32/Win64 API (native code)
Delphi
by Dezipaitor,
23. Aug 2008
Freut mich, dass es klappt.
Ich muss nur sicherstellen, dass die Benutzung korrekt ist. Das mit den SIDs ist leider eine Stolperfalle.
Sobald du FileEntry.SecurityDescriptor löscht, wird die SID, die auch in FAccessControlEntry zugewiesen wurde, gelöscht.
Und damit funktioniert FAccessControlEntry nicht mehr unbedingt korrekt.
Forum: Win32/Win64 API (native code)
Delphi
by Dezipaitor,
23. Aug 2008
Aber das stimmt immernoch nicht so:
Du verwendest : Value.SID hier.
D.h. wenn die Instanz (Parameter) Value zerstört wird, dann wird die Instanz Value.SID ungültig, aber nicht nil!
Wenn du TJwSecurityAccessControlEntry überall durch TJwDiscretionaryAccessControlEntryAllow ersetzt, dann compiliert es, oder willst du auch Zugriffsverweigerungen setzen?
procedure...
Forum: Win32/Win64 API (native code)
Delphi
by Dezipaitor,
23. Aug 2008
Ja der Parametertype muss auch TJwDiscretionaryAccessControlEntryAllow sein.
Forum: Win32/Win64 API (native code)
Delphi
by Dezipaitor,
23. Aug 2008
Wie sind denn die Flags?D.h. sind sie so wie gedacht?
Was ich gerade bemerkt habe ist, dass du SID einfach übergibst. Da Create
jedoch keine Kopie anlegt und du keinen 5 Parameter (ownSid = true) verwendest,
könnte es zu Problemem kommen (doppelt freigegebenes Objekt).
Nutze den Kopierkonstruktor:
procedure TFileEntry.SetAccessControlEntry(Value : TJwSecurityAccessControlEntry);...
Forum: Win32/Win64 API (native code)
Delphi
by Dezipaitor,
22. Aug 2008
Nur ein Schuss ins Blaue:
In SetAccessControlEntry kopierst du die Flags der anderen ACE. Meiner Meinung nach wird da das Flag afInheritedAce, welches definiert, dass ein ACE vererbt ist, angegeben und dann von Windows ignoriert, da es ungültig ist.
Ein Mapping ist nur notwendig, wenn du generische Rechte verwendest (GENERIC_ALL, GENERIC_READ, usw). Dann wird, wenn ein solches Recht...