CreateFile() - Return code 5 Access Denied
-
Hallo,
Ich würde gerne wissen, ob es möglich ist, dass mein Programm, sobald CreateFile() Error Code 5 zurück gibt "Access Denied", möchte ich, dass mein Program temporär die Rechte für diese Datei ändert, damit es trotzdem gelesen werden kann.
Ist dies möglich? Wenn ja, wie?
Mein Program wird von einem Administrator auf dem OS Windows XP ausgeführt.
Danke schon im voraus!
samyboy
-
Probier es mal mit GetFileAttributes/SetFileAttributes (da gibt es auch ...Ex-Varianten).
-
Temporär geht gar nix. D.h. du kannst natürlich die Berechtigung hinzufügen und danach den alten Zustand wieder herstellen. Wenn dein Programm dabei unterbrochen wird bleiben aber natürlich die "temporären" Berechtigungen eingetragen.
Auch ist das ganze alles andere als trivial.
Du musst die ACLs so anpassen, dass der aktuelle User die Datei lesen kann.Dazu kann es z.B. schonmal nötig sein den Besitz der Datei zu übernehmen, nämlich dann, wenn der aktuelle User nichtmal das Recht hat die Berechtigungen für die Datei zu ändern.
Dieser Schritt ist AFAIK auch nicht "reversibel", d.h. du kannst die "Ownership" der Datei danach nicht an den ursprünglichen User zurückgeben.
(Zumindest geht es über die GUI nicht - ich nehme daher an dass es gar nicht geht. Macht als Sicherheitsfeature auch Sinn, sonst könnte ein Admin eine Datei lesen und/oder ändern, ohne dass der User der sie erstellt hat jemals was davon mitbekommen kann. Oder noch schlimmer: eine "böse" Datei die irgendwo liegt einem total unschuldigen User "unterjubeln")Das ist mal das eine.
Dann gibt es auch noch Fälle, wo es nicht ausreicht einen ACE mit "allow" für Administratoren hinzuzufügen. Nämlich dann, wenn es einen oder mehrere "deny" ACEs gibt die für den aktuellen User greifen (sei's direkt auf den User, oder über eine seiner Gruppen).
Diese müssten entfernt werden, da deny "stärker" ist als allow.Wie die entsprechenden Funktionen heissen weiss ich nicht auswendig, aber such mal nach "access control list" (ACL) bzw. "access control entry" (ACE) im Zusammenhang mit Files.