![]() |
CheckFileAccess für beliebiegen Benutzer
Liste der Anhänge anzeigen (Anzahl: 1)
Hier habe ich das Thema schon mal angesprochen
![]() Trotzdem interessiert es mich, wie man auch die Zugriffsrechte für andere Benutzer ermitteln kann. Mit diesen Code von Nico:
Delphi-Quellcode:
Geht es nur für den angemeldeten Benutzer, weil das ProzessToken gebraucht wird. Und das Problem ist jetzt, dass man für einen anderen Benutzer kein ProzessToken heranziehen kann, um dieses mit der DACL abzugleichen mittels AccessCheck. Gibt es jetzt irgendetwas vergleichbares, was man statt dessen nehmen könnte? Und wenn ja was und wie geht das? Windows schafft es ja auch in dem Seitenreiter "Sicherheit" vom Eigenschaftendialog.
function CheckAccessToFile(DesiredAccess: DWORD; const FileName: WideString): Boolean;
const GenericFileMapping : TGenericMapping = ( GenericRead: FILE_GENERIC_READ; GenericWrite: FILE_GENERIC_WRITE; GenericExecute: FILE_GENERIC_EXECUTE; GenericAll: FILE_ALL_ACCESS ); var LastError : DWORD; LengthNeeded : DWORD; SecurityDescriptor : PSecurityDescriptor; ClientToken : THandle; AccessMask : DWORD; PrivilegeSet : TPrivilegeSet; PrivilegeSetLength : DWORD; GrantedAccess : DWORD; AccessStatus : BOOL; begin Result := False; LastError := GetLastError; if not GetFileSecurityW(PWideChar(FileName), OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION or DACL_SECURITY_INFORMATION, nil, 0, LengthNeeded) and (GetLastError <> ERROR_INSUFFICIENT_BUFFER) then Exit; SetLastError(LastError); Inc(LengthNeeded, $1000); SecurityDescriptor := PSecurityDescriptor(LocalAlloc(LPTR, LengthNeeded)); if not Assigned(SecurityDescriptor) then Exit; try if not GetFileSecurityW(PWideChar(FileName), OWNER_SECURITY_INFORMATION or GROUP_SECURITY_INFORMATION or DACL_SECURITY_INFORMATION, SecurityDescriptor, LengthNeeded, LengthNeeded) then Exit; if not ImpersonateSelf(SecurityImpersonation) then Exit; try if not OpenThreadToken(GetCurrentThread, TOKEN_QUERY or TOKEN_IMPERSONATE or TOKEN_DUPLICATE, False, ClientToken) then Exit; try AccessMask := DesiredAccess; MapGenericMask(AccessMask, GenericFileMapping); PrivilegeSetLength := SizeOf(TPrivilegeSet); if AccessCheck(SecurityDescriptor, ClientToken, AccessMask, GenericFileMapping, PrivilegeSet, PrivilegeSetLength, GrantedAccess, AccessStatus) then Result := AccessStatus; finally CloseHandle(ClientToken); end; finally RevertToSelf; end; finally LocalFree(HLOCAL(SecurityDescriptor)); end; end; Im Anhang mal meine aktuelle Demo. |
Re: CheckFileAccess für beliebiegen Benutzer
Ja, da muss ich dann doch mal dezent den Beitrag wieder nach oben holen.
|
Re: CheckFileAccess für beliebiegen Benutzer
Die SID alleine dürfte nicht reichen, da die Sicherheitsbeschreibung auch Gruppen enthalten kann. Man müsste man also auch noch die Gruppenzugehörigkeit der SID auflösen.
edit: Zitat:
![]() |
Re: CheckFileAccess für beliebiegen Benutzer
Zitat:
Zitat:
|
Re: CheckFileAccess für beliebiegen Benutzer
Zitat:
Zitat:
Zitat:
|
Re: CheckFileAccess für beliebiegen Benutzer
Ich denke, ich will ein Token gegen eine Sicherheitsbeschreibung testen. Weil ich testen will, ob ein beliebiger Benutzer entsprechende Rechte hat.
Aber lassen wir das mal, ich denke, das wird zu aufwendig und ich verweise an der Stelle, wo ich das brauche auf die Seite im MSDN, die du verlinkt hast. Das Auslesen der ACEs aus der ACL wäre mir wichtiger, weil ich dies unbedingt bräuchte: ![]() |
Re: CheckFileAccess für beliebiegen Benutzer
Ein paar Anregungen zum Thema 'effektive Berechtigungen' mittels SID:
ps: und siehe Kommentare unter: ![]() |
Re: CheckFileAccess für beliebiegen Benutzer
Danke noch mal für die Links. Aber wie gesagt, das ist jetzt erstmal nebensächlich geowrden. Priorität hat im Moment das andere Problem mit der DACL.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:23 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz