AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateizugriff überprüfen.

Ein Thema von Dezipaitor · begonnen am 30. Dez 2007
Antwort Antwort
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#1

Dateizugriff überprüfen.

  Alt 30. Dez 2007, 23:56
Ich habe zufällig diesen Beitrag Schreibrechte einer Datei überprüfen gesehen, und konnte nicht umhin ihn mit der JWSCL zu beschreiben und etwas zu erweitern.
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:
{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.
Die Ausgabe könnte so aussehen:
Zitat:
This program checks access to file or folder: e:\test2

Full access allowed? TRUE
Full read access allowed? TRUE
Allowed Access: FILE_ALL_ACCESS
Full list:
- generic
[X] FILE_ALL_ACCESS
[X] FILE_GENERIC_READ or FILE_GENERIC_WRITE or FILE_GENERIC_EXECUTE or Delete
[X] FILE_GENERIC_READ or FILE_GENERIC_EXECUTE
[X] FILE_GENERIC_READ or FILE_GENERIC_EXECUTE
[X] FILE_GENERIC_READ
[X] FILE_GENERIC_WRITE and not READ_CONTROL
- specific
[X] FILE_TRAVERSE or FILE_EXECUTE
[X] FILE_LIST_DIRECTORY or FILE_READ_DATA
[X] FILE_READ_ATTRIBUTES
[X] FILE_READ_EA
[X] FILE_ADD_FILE or FILE_WRITE_DATA
[X] FILE_ADD_SUBDIRECTORY or FILE_APPEND_DATA
[X] FILE_WRITE_ATTRIBUTES
[X] FILE_WRITE_EA
[X] FILE_DELETE_CHILD
[X] FILE_DELETE
- standard
[X] WRITE_DAC
[X] WRITE_OWNER
[X] READ_CONTROL
Hit [enter]

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 Be careful when interpreting security descriptors across machine boundaries.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz