![]() |
Dateizugriff überprüfen.
Ich habe zufällig diesen Beitrag
![]() Das folgende Programm überprüft, ob bestimmte Rechte für eine Datei oder Ordner erlaubt sind und gibt zudem nochmals alle Rechte an.
Delphi-Quellcode:
Die Ausgabe könnte so aussehen:
{This program shows possible access to a file or folder.
Call this program with a parameter. Needs JWSCL Revision #128 or higher. } program FileAccessCheck; {$APPTYPE CONSOLE} uses JwaWindows, jwsclConstants, JwsclMapping, JwsclToken, JwsclDescriptor, JwsclSecureObjects, JwsclExceptions, JwsclStrings; function CheckAccessToFile(DesiredAccess: DWORD; const FileName: TJwString): Boolean; var SD : TJwSecurityDescriptor; FileSecurity : TJwSecureFileObject; begin FileSecurity := TJwSecureFileObject.Create(FileName); try result := FileSecurity.AccessCheck(DesiredAccess); finally FileSecurity.Free; end; end; function GetMaximumAccess(const FileName: TJwString): Cardinal; var SD : TJwSecurityDescriptor; FileSecurity : TJwSecureFileObject; Privs : TJwPrivilegeSet; Status : Boolean; begin FileSecurity := TJwSecureFileObject.Create(FileName); try FileSecurity.AccessCheck(MAXIMUM_ALLOWED,Privs,result,Status); finally FileSecurity.Free; Privs.Free; end; end; procedure OutputFileAccess(const GrantedAccess : Cardinal); var i : Integer; begin writeln('- generic'); for i := low(FileFolderMapping) to high(FileFolderMapping) do begin if i = 7 then writeln('- specific'); if i = 17 then writeln('- standard'); if GrantedAccess and FileFolderMapping[i].Right = FileFolderMapping[i].Right then write('[X] ') else write('[ ] '); //names may vary depeding on resource string contents writeln(FileFolderMapping[i].Name); end; end; begin Writeln('This program checks access to file or folder: ', ParamStr(1)); writeln; try writeln('Full access allowed? ',CheckAccessToFile(GENERIC_ALL,ParamStr(1))); except on E : EJwsclSecurityException do Writeln(E.Message); end; try writeln('Full read access allowed? ',CheckAccessToFile(GENERIC_ALL,ParamStr(1))); except on E : EJwsclSecurityException do Writeln(E.Message); end; try writeln('Allowed Access: ', TJwSecurityFileFolderMapping.MapAccessMaskToString( GetMaximumAccess(ParamStr(1)))); except on E : EJwsclSecurityException do Writeln(E.Message); end; Writeln('Full list:'); OutputFileAccess(GetMaximumAccess(ParamStr(1))); Writeln('Hit [enter]'); readln; end. Zitat:
PS. Die Überprüfung von Netzwerkresourcen über diese Funktion kann nach hinten losgehen, da letztendlich immer die entfernte Stelle den Zugriff überprüft. Dies kann jedoch anders ausfallen als die lokale Überprüfung, wenn derjenige Benutzer, der die Überprüfung durchführt (der Tokenbesitzer), nicht auch gleichzeitig auf dem entfernten Rechner bekannt ist. Siehe auch ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:59 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