Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Zugriffsrechte von Dateien ändern (https://www.delphipraxis.net/185951-zugriffsrechte-von-dateien-aendern.html)

naht2k6 21. Jul 2015 13:58

Zugriffsrechte von Dateien ändern
 
Hi,

ich hoffe ich bin hier richtig bei "Win32/64 API".
Also, folgendes ist mein Problem.

Ich schreibe an einem Programm, dass gern Einstellungen in einer Ini-Datei speichert.
Ich würde gern diese Ini-Datei im Windows Common_Appdata_Folder lesen und schreiben. Sinnvoller Weise soll diese Datei natürlich deswegen in den Common_Appdata_Folder, weil ich mit allen vorhanden Windows Usern darauf zugreifen können möchte.

Eigentlich alles ganz easy und vor allem standart.
Nun ist es aber so, dass ich die betreffenden Dateien nicht per Setup installieren kann, sondern sie beim ersten Start des Programms neu erstellen muss.
Wenn ich nun das Programm mit Administratorrechten installiere, und auch mit genau diesem Nutzer zum ersten mal starte, erstellt der die Datei mit Zugriffsrechten, die sehr eingeschränkt sind, und die ich vor allem nicht beeinflussen kann. Wenn ich nun das Programm mit einem anderen Nutzer starte, kann die Datei nicht bearbeitet werden.

Die Datei in den User_Appdata_Folder zu packen ist leider nicht praktikabel!

Viel zu lange Rede, recht kurzer Sinn. Ich habe es immerhin schon geschafft, die Zugriffsrechte von Dateien zu ändern. Ich kann also nach dem erstellen der Datei die Zugriffsrechte beispielsweise so ändern, dass "Jeder" vollen Zugriff hat. Das habe ich unter Verwendung dieser kleinen Hilfe geschafft: http://www.delphipraxis.net/30695-pe...e-aendern.html

Mein Problem ist nun, dass ich das unabhängig von der Region tun muss, in der der Computer steht. Die Gruppennamen für Zugriffsrechte haben so schön regionale Namen, wie "User" / "Bentzer", "Jeder" / "Everybody", usw. Das ganze natürlich in allen möglichen Sprachen.
Mir fehlt also die Möglichkeit, die Datei für die allumfassende Gruppe "Jeder" unabhängig von der Sprache schreibbar zu machen.

Kennt wer eine tolle Variable, der die lokale Gruppe "Jeder" beschreibt. Oder gibt es eine Möglichkeit, sich den String zu holen. Oder hat wer eine ganz andere Idee?

Dank schon mal.

Klaus01 21. Jul 2015 14:09

AW: Zugriffsrechte von Dateien ändern
 
Hallo,

kannst Du nicht eine Dummy-Ini Datei vom Setup Programm installieren lassen.
Das hätte auch den Vorteil das die Ini-Datei bei ein Deinstalltion mit entfernt wird.

Grüße
Klaus

Dalai 21. Jul 2015 14:28

AW: Zugriffsrechte von Dateien ändern
 
Also erstens: Zugriffsrechte öffnet man nur so weit, wie es unbedingt notwendig ist, nicht so weit wie es geht. "Jeder" mit Vollzugriff auszustatten, ist absoluter Unsinn! Ich habe mich bereits mehrfach hier im Forum dazu ausgelassen, daher spare ich mir das an dieser Stelle; trotzdem kann man das nicht oft genug erwähnen, weil dieser Nonsens seit Jahren durchs Netz geistert und von "allen" (oft gedankenlos) benutzt wird.

Zweitens: Jeder Benutzer und jede Gruppe hat einen sogenannten SID (Security Identifier). Diese sind eineindeutig für jedes System. Diese Benutzer(gruppen), auf die du hinaus willst, haben ebenfalls einen SID, diese sind immer gleich. Von MS werden die als Well-known SIDs bezeichnet. Das bedeutet, du solltest diese SIDs benutzen, um die Zugriffsrechte zu setzen, denn dann bist du unabhängig von der Sprache des installierten OS.

MfG Dalai

p80286 21. Jul 2015 14:48

AW: Zugriffsrechte von Dateien ändern
 
Dalai's Ausführungen ist kaum etwas hinzu zu fügen, außer zumindestens mein Rechner hat von einem Admin eine solche Konfiguration bekommen, daß ich als Benutzer problemlos ein Verzeichnis unter "ProgramData" anlegen kann und ich kann dort auch problemlos schreiben. Dies gilt ebenso für alle anderen Benutzer, die sich auf dem Rechner einloggen können.
Sollte dies nicht möglich sein, besteht die entfernte Möglichkeit, daß da sich jemand etwas bei gedacht hat. In solchen Fällen wäre es ein Gebot der Höflichkeit, den Benutzer darauf hinzuweisen, daß das Programm ein Verzeichnis/Datei benötigt und er diese doch bitte anlegen soll, bzw. seinen Admin informieren soll.

Programmierer/Softwarevertreiber die mit der Brechstange versuchen ihre Vorstellungen durchzusetzen machen sich auf Dauer mit solchen Aktionen nicht sehr beliebt.

Gruß
K-H

hathor 21. Jul 2015 14:59

AW: Zugriffsrechte von Dateien ändern
 
Getestet mit XE7, WIN8.1 - Everyone wird überall verstanden.

Delphi-Quellcode:
// uses WinApi.ACCCTRL, WinApi.ACLAPI,
procedure TForm1.Button1Click(Sender: TObject);
var
  TmpString: String;
  pSD : Pointer;
  NewDacl, OldDacl: PACl;
  EA: array [0..5] of EXPLICIT_ACCESS;
  ret : Cardinal;
begin
ret:= 1;
  TmpString := 'F:\TEST.txt';
  GetNamedSecurityInfo(PChar(TmpString), SE_FILE_OBJECT,
                DACL_SECURITY_INFORMATION, nil, nil, @OldDacl, nil, pSD);
  BuildExplicitAccessWithName(@EA, PChar('Everyone'), GENERIC_ALL,
                GRANT_ACCESS, SUB_CONTAINERS_AND_OBJECTS_INHERIT);
  SetEntriesInAcl(1, @EA, OldDacl, NewDacl);
  ret:= SetNamedSecurityInfo(PChar(TmpString), SE_FILE_OBJECT,
                DACL_SECURITY_INFORMATION, nil, nil, NewDacl, nil);

  if ret= ERROR_SUCCESS then
  ShowMessage('Bei diesem Objekt wurden keine Objekttypen zugeordnet.'+#13#10+
            'Achtung: Dies ist ein mögliches Sicherheitsrisiko, weil jeder,'+#13#10+
            'der Zugriff auf dieses Objekt hat, dieses besitzen kann.'+#13#10+
            'Der Besitzer dieses Objekts sollte so bald wie möglich'+#13#10+
            'Berechtigungen zuordnen.');
end;

jaenicke 21. Jul 2015 15:46

AW: Zugriffsrechte von Dateien ändern
 
Man sollte damit allerdings vorsichtig sein. Solche Aktionen werden von einigen Virenscannern erkannt und Programme entsprechend per Verhaltensanalyse als Virus oder "potentiell unterwünschtes Programm" eingestuft. (Das haben wir selbst schon gehabt, in dem Fall bei den Zugriffsrechten auf einen Registry-Schlüssel.) Ausnahme sind dabei Setups, dabei werden solche Aktionen offenbar eher erwartet.

Deshalb haben wir dies mittlerweile auch anders gelöst. Bei uns war das nicht so einfach, aber gerade bei Einstellungen ist es in der Regel doch ohnehin nicht erwünscht, dass ein Benutzer die Einstellungen des anderen Benutzers kaputt macht?!

naht2k6 22. Jul 2015 09:31

AW: Zugriffsrechte von Dateien ändern
 
Danke für die Anteilnahme. Eure Bedenken nehme ich zur Kenntniss. :D

Zuerstmal. Recht haste @Dalai. Ich versuche "Jeder" zu vermeiden. Aber um den Fakt, dass jeder Benutzer auf dem PC Schreibrechte auf dieser Datei braucht, komm ich nicht rum. Es handelt sich um eine Software zum betreiben eines recht komplexen Systems. Verschiedene Einstellungen für verschiedene Nutzer würden zu einem extremen Durcheinander führen.

@P80286 Der ProgramData Ordner ist ja genau für sowas da. Wenn ich per Hand dort eine Datei erstelle, hat diese auch großzügige Zugriffrechte.
Nur wenn ich sie aus dem Programm erstelle, taucht das Problem auf. Ich habe nicht vor die Brechstange rauszuholen. Höchstens ganz kurz. :D

Über kurz oder lang wird das Problem hoffentlich mit dem Setup gelößt.

Mavarik 22. Jul 2015 10:24

AW: Zugriffsrechte von Dateien ändern
 
Zitat:

Zitat von naht2k6 (Beitrag 1309399)
Wenn ich nun das Programm mit Administratorrechten installiere, und auch mit genau diesem Nutzer zum ersten mal starte, erstellt der die Datei mit Zugriffsrechten, die sehr eingeschränkt sind, und die ich vor allem nicht beeinflussen kann. Wenn ich nun das Programm mit einem anderen Nutzer starte, kann die Datei nicht bearbeitet werden.

Übersehe ich gerade etwas? Wenn Du für die Installation Admin-Rechte brauchst... Fein...(Wofür auch immer soll mal egal sein)

Aber warum startest Du das Programm dann bei 1. mal mit Admin-Rechten?

Mavarik

naht2k6 22. Jul 2015 10:40

AW: Zugriffsrechte von Dateien ändern
 
Da steht weder, dass ich Adminrechte zur installation brauche, noch dass ich das Programm mit Adminrechten starte. Da steht auch nicht, dass ich das muss. ;)

Wenn ich als Nutzer mit Adminrechten angemeldet bin, heißt das ja nicht, dass jedes Programm automatisch mit Adminrechten ausgeführt wird.

Ich wollte nur nicht, dass die ersten Antworten lauten: "Probiers mal mit Adminrechten", oder so. Es war einfach ein Szenario.

Der schöne Günther 22. Jul 2015 10:47

AW: Zugriffsrechte von Dateien ändern
 
Nur als Hinweis: Hier die genau gleiche Frage auf Stackoverflow

Mavarik 22. Jul 2015 10:54

AW: Zugriffsrechte von Dateien ändern
 
Zitat:

Zitat von naht2k6 (Beitrag 1309485)
Da steht weder, dass ich Adminrechte zur installation brauche, noch dass ich das Programm mit Adminrechten starte. Da steht auch nicht, dass ich das muss. ;)

Ok Dann steht da wohl bei mir etwas anderes...

Zitat:

Zitat von naht2k6 (Beitrag 1309399)
Wenn ich nun das Programm mit Administratorrechten installiere,

Nur weil ein Benutzer Admin rechte hat, startet ein Programm nicht im Admin-Mode... Aber wahrscheinlich verstehe ich da wieder etwas nicht... Bin dann mal weg...

naht2k6 22. Jul 2015 11:15

AW: Zugriffsrechte von Dateien ändern
 
Ja sry, vielleicht bin ich zu blöd, um zu begreifen, was ich schreibe (ernstahaft!). Schreib doch einfach, worauf du hinaus willst. Ich will niemandem aufn Schlips treten.

Ich meine nur, dass ich nicht schrieb, dass dieses von mir beschriebene Szenario Pflicht sei. Wenn du der Meinung bist, dass darin der Fehler liegt, bitte ich um Offenbarung. Das wüsst ich schon gern. Aber dann schreib das doch statt so merkwürdig zu fragen.

Nach meinem Verständniss ist es so, dass wenn ich ein Programm als Nutzer mit Adminrechten starte, es nicht gleich Adminrechte hat. Mein Windows will, dass ich das Programm ausdrücklich mit Adminrechten starte. Wenn ich als Nutzer mit Adminrechten angemeldet bin, erspart mir das lediglich die Eingabe des Passworts zum Programmstart, oder?

Ich weiss es nicht, hab da nicht den professionellen Hintergrund. Lass mich gern belehren.

Mavarik 22. Jul 2015 11:51

AW: Zugriffsrechte von Dateien ändern
 
OK kleiner Administrator Kurs...

Vor UAC gab es Benutzer Konten mit und ohne Administrator rechten...
Also erst mal unterscheiden ob XP und älter oder Vista und neuer...

Dann ob UAC abgeschaltet ist oder "normal"

Selbst ein Benutzer mit "Admin-Rechten" bekommt wenn ein Prozess mit Admin-Rechten ausgeführt werden soll den hidden Desktop mit der Admin Bestätigungsabfrage...

Generell kann man natürlich in der Verknüpfung eintragen, dass ein Programm mit Admin-Rechten ausgeführt werden soll... Das machen dann viele weil - alte Software die nicht an UAC angepasst worden ist oder "Weil besser mehr Rechte Fehleinschätzung"
Ein Programm im Admin Modus kann zwar auch in sonst schreibgeschützte Verzeichnisse schreiben aber die Kommunikation mit anderer Software fällt dann schwerer...

Daher generell die Aussage... Admin Modus "schlecht"...

Nix weiter... Es sei den ich habe Dein Problem doch nicht verstanden...

p80286 22. Jul 2015 12:32

AW: Zugriffsrechte von Dateien ändern
 
Kleine Erweiterung:
Der Zugriff auf Dateien wird durch die entsprechenden Zugriffsrechte (Gruppen oder Einzel"personen") geregelt. wenn z.B. die Gruppe "supersoftware" alleine die Schreib- und Lese-Rechte hat, dann schauen alle Nichtmitglieder in die Röhre. Einzig der "Besitzer" kann jetzt noch an den Rechten drehen.

Gruß
K-H

P.S.
übrigens ist verboten verboten, egal was erlaubt wurde.

Dalai 22. Jul 2015 13:02

AW: Zugriffsrechte von Dateien ändern
 
Zitat:

Zitat von naht2k6 (Beitrag 1309466)
Zuerstmal. Recht haste @Dalai. Ich versuche "Jeder" zu vermeiden. Aber um den Fakt, dass jeder Benutzer auf dem PC Schreibrechte auf dieser Datei braucht, komm ich nicht rum.

Dann beschränke dich auf "Ändern" oder gar nur "Schreiben". Was ist der Unterschied? "Vollzugriff" beinhaltet nicht nur Lesen und Schreiben sondern auch das Ändern von Zugriffsrechten! "Ändern" beinhaltet auch Löschen, während "Schreiben" nur bedeutet, existierende Dateien ändern zu können (und ggf. neue anlegen, das weiß ich grad nicht). Aber die genannten Zugriffsrechte sind nur die "groben Dinger", das kann man unter "Erweitert" noch viel detaillierter einstellen.

Will sagen: Beschäftige dich mit den Zugriffsrechten lieber etwas länger, bevor du Löcher aufreißt.

MfG Dalai


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:11 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