Includes | | | | | Download weiter unten! Hallo Profaner...
Die Include setzt die bei NTFS-Partitionen vorhandenen Zugriffsrechte (DACL) einer Datei oder eines Ordners auf beliebige User, Gruppen und Werte. Besonders wichtig ist dies bei der Entwicklung von Datenbanken, die auf Mehrbenutzersystemen laufen. Optional gibt es auch die Möglichkeit, eine Logdatei mit den Ergebnissen der APIs der enthaltenen Funktionen zu erstellen. Darum, ob überhaupt Zugriffsrechte gesetzt werden können, kümmert sich die Include durch die API GetVolumeInformation selbst. Hier wird aber nür verwertet, ob der Zugriff einschränkbar ist, nicht um welche Partition es sich handelt! Wenn die Include auf anderen Betriebssystemen als auf Windows laufen soll, muß dies evtl. mit bedacht werden.
Die Include enthält 2 Prozeduren: Get_Group_Name (3 Parameter) => Ermittelt über den SID den richtigen Gruppennamen der Jeder-Gruppe oder der Administratoren-Gruppe. In @$(0) wird der ermittelte Gruppenname zurückgegeben. Set_ACE_IN_DACL (6 Parameter) => Verbietet oder erlaubt Zugriffe von bestimmten Usern oder Gruppen auf Dateien oder Ordner.
Die Prozedur Get_Group_Name: 1.Parameter: Jeder oder Administratoren, je nach dem, welchen Gruppennamen man benötigt. 2.Parameter: Nummer einer mit Assign zugewiesenen und vorhandenen Datei zum Erzeugen eines Logs, 0 wenn keine Logdatei erstellt werden soll 3.Parameter: Aktuelle Eintragsnummer des Logs (Steht am Ende in Log_Einträge&)
Die Prozedur Set_ACE_IN_DACL: 1.Parameter: Datei- oder Ordnername 2.Parameter: Username oder Gruppe, auf die sich die Zugriffsrechte beziehen. 3.Parameter: +;-;0 (-=Rechte verbieten, +=Rechte erlauben, 0=alles vorhandene löschen) 4.Parameter: Flags als String Mögliche Flags - FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen) - FILE_WRITE_DATA (Erlaubt Daten zu Scheiben) - FILE_APPEND_DATA (Erlaubt Daten anzuhängen) - FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen) - FILE_WRITE_EA (Erlaubt erweiterte Attribute zu schreiben) - FILE_EXECUTE (Erlaubt eine Datei auszuführen) - FILE_READ_ATTRIBUTES (Lesen der Fileattribute) - FILE_WRITE_ATTRIBUTES (Ändern der Fileattribute) - WRITE_DAC (Ändern der DACL Einträge) - READ_CONTROL (Lesen der DACL Einträge und Besitzer) - SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten) - File_Delete_CHILD (Erlaubt einen Unterordner zu löschen - für Dateien keine Bedeutung) - ACCESS_SYSTEM_SECURITY (Erlaubt den Zugriff auf den SACL) - WRITE_OWNER (Eigentümer ändern) - F_DELETE (Datei löschen) 5.Parameter: Numer einer mit Assign zugewiesenen Datei zum Erzeugen eines Logs, 0 wenn keine Logdatei erstellt werden soll 6.Parameter: Aktuelle Eintragsnummer des Logs (Steht am Ende in Log_Einträge&)
Beispiel für das Einbauen der Include:
$I DACL_SET.INC
Declare Datei$
Assign #1,"C:FILE_TEST.TXT"
REWRITE #1
Close #1
LET DATEI$=@LoadFile$("Datei auswählen","*.*")
Get_Group_Name "Jeder",1,LOG_EINTRÄGE&
Set_ACE_IN_DACL Datei$,@$(0),"+0","SYNCHRONIZE FILE_WRITE_EA FILE_READ_EA FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_EXECUTE FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES F_DELETE",1,LOG_EINTRÄGE&
Get_Group_Name "Jeder",1,LOG_EINTRÄGE&
Set_ACE_IN_DACL Datei$,@$(0),"-","F_DELETE",1,LOG_EINTRÄGE&
Get_Group_Name "Administratoren",1,LOG_EINTRÄGE&
Set_ACE_IN_DACL Datei$,@$(0),"+","FILE_DELETE_CHILD,READ_CONTROL,ACCESS_SYSTEM_SECURITY,WRITE_OWNER,WRITE_DAC,F_DELETE,SYNCHRONIZE,FILE_WRITE_EA,FILE_READ_EA,FILE_READ_DATA,FILE_WRITE_DATA,FILE_APPEND_DATA,FILE_EXECUTE,FILE_READ_ATTRIBUTES,FILE_WRITE_ATTRIBUTES,F_DELETE",1,LOG_EINTRÄGE&
@ShellExec("C:FILE_TEST.TXT","open",1)
|
| | | | |
| | | Achtung! Jedes Zugriffsrecht, das einer Gruppe oder einem User nicht erlaubt wurde, wird diesem User automatisch verweigert. Jedes Recht, das einer Gruppe verboten wird, wird auf jeden Fall jedem User verboten, der Mitglied in dieser Gruppe ist (bis auf den Eigentümer natürlich). Verbote haben immer Vorrang vor Erlaubnissen. Hat z.B. User X in der Gruppe Hauptbenutzer die Erlaubnis eine Datei zu löschen und wird ihm das Löschen in der Gruppe Jeder verboten, so kann User X die besagte Datei nicht löschen! Mit wirklichen Verboten sollte deshalb immer sehr sorgsam umgegangen werden und Verbote sollten möglichst besser durch das nicht erlauben von Zugriffen realisiert werden! |
| | | | |
| | | Im neuen Download unter diesem Posting können nun GENERIC Rechte in ihre spezifischen Rechte gemappt werden. Die Prozedur, die dazu zur Verfügung steht, heißt Map_GENERIC. Diese Prozedur wandelt ein GENERIC Recht in die entsprechenden spezifischen Rechte um und gibt dies als String zurück. Dieser String kann direkt an die Prozedur Set_ACE_IN_DACL übergeben werden. 1.Parameter: GENERIC Rechte als String=> GENERIC_READ GENERIC_WRITE GENERIC_EXECUTE GENERIC_ALL 2.Parameter: Nummer einer mit Assign zugewiesenen und vorhandenen Datei zum Erzeugen eines Logs, 0 wenn keine Logdatei erstellt werden soll 3.Parameter: Aktuelle Eintragsnummer des Logs (Steht am Ende in Log_Einträge&)
Will hoffen, das alles klappt.
Beispiel: KompilierenMarkierenSeparieren $I DACL_SET.INC
Declare MY_FILE$,MY_RIGHTS$,MY_NAME$
*** LogDatei erzeugen ***
ASSIGN #1,"C:DACL.TXT"
REWRITE #1
Close #1
*** Datei auswählen ***
LET MY_FILE$=@LOADFILE$("Bitte Datei zum Ändern der Zugriffsrechte auswähle","*.*")
*** Zugriffsrechte neu festlegen ***
Map_GENERIC "GENERIC_ALL",1,LOG_EINTRÄGE& 1.Schritt: GENERIC Rechte in spezifische Rechte umwandeln (alle Rechte)
LET MY_RIGHTS$=@$(0)
GetCurrentUser 1,LOG_EINTRÄGE& 2.Schritt: "Current User" ermitteln...
LET MY_NAME$=@$(0)
Set_ACE_IN_DACL MY_FILE$,MY_NAME$,"+0",MY_RIGHTS$,1,LOG_EINTRÄGE& 3.Schritt: Rechte des aktuellen Users auf Vollzugriff ändern - sonstige, in der Datei vorhandene Rechte, löschen.
Map_GENERIC "GENERIC_READ",1,LOG_EINTRÄGE& 1.Schritt: GENERIC Rechte in spezifische Rechte umwandeln (Leserecht)
LET MY_RIGHTS$=@$(0)
GET_Group_Name "Jeder",1,LOG_EINTRÄGE& 2.Schritt: "Gruppennamen von "Jeder" ermitteln...
LET MY_NAME$=@$(0)
Set_ACE_IN_DACL MY_FILE$,MY_NAME$,"+",MY_RIGHTS$,1,LOG_EINTRÄGE& 3.Schritt: Rechte jedes Users Users auf vollen Lesezugriff ändern - sonstige, in der Datei vorhandene Rechte, beibehalten.
@ShellExec("C:DACL.TXT","open",1)
|
| 7 kB | | Kurzbeschreibung: | Include zum Setzen von Dateizugriffsrechten Version 4 | | Hochgeladen: | 09.07.2005 | | Ladeanzahl: | | | | Herunterladen |
| | | | |
| | | Es hat sich einiges geändert: - Die Prozedur MAP_GENERIC gibt es nicht mehr. GENERIC Rechte werden nun direkt gemappt. - Die Funktion SET_ACE_IN_DACL gibt es nicht mehr, sie wurde durch folgende Funktion ersetzt: SET_FILE_ACE_IN_DACL SET_FILE_ACE_IN_DACL setzt den SecurityDescriptor einer Datei oder eines Ordners auf NTFS-Partitionen. - Zugänglichmachen von Dateien und Ordnern für alle User (z.B. Datenbanken in Mehrbenutzerprogrammen) - Dateien erzeugen, die nur für einzelne User sichtbar und änderbar sind. - ...
Desweiteren gibt es jetzt: SET_REGISTRY_ACE_IN_DACL - Erzeugen von Registryschlüsseln, die nicht ohne weiteres zu editieren sind. - Erzeugen von Registryschlüsseln, die nicht ohne weiteres von jedem zu lesen sind. - Erzeugen von unsichtbaren Registryschlüssel, die nur von einem Systemservice gelesen und beschrieben werden können. - ....
SET_PROCESS_ACE_IN_DACL - Verhindern, daß andere Prozesse den eigenen Prozess ohne weiteres ausschalten können. - Erzeugung eines Serviceprogrammes, das nur vom System beendet werden kann. - Verhindern, Daß über einen Remote-Thread ein anderer Prozess mit meinen Rechten arbeiten kann. - ...
Dokumentation der Prozeduren ist im Download enthalten (will hoffen, daß alles geht). |
| | | | |
| | | Neue Version: Leere DACEs (d.h. ohne Zugriffsrechtsflags) werden nun im Security-Descriptor automatisch gelöscht. Vererbung wird noch nicht unterstützt. |
| 27 kB | | Kurzbeschreibung: | Zugriffsrechte von Objekten setzen, Version 6.1 | | Hochgeladen: | 16.12.2005 | | Ladeanzahl: | | | | Herunterladen |
| | | | |
| | | Oben kleines Update gemacht, hatte bei den Prozesse die Deklaration einer Variablen vergessen. Habe die anderen Includes zur Security mit dazugepackt.
Viel Spaß mit dem Code...
Gruß
AH |
| | | | |
| | | Werde mich als nächste um die Einbindung der Vererbung kümmern. Da es da auch auf die richtige Sortierung und das auslesen des Headers des Security-Descriptors ankommt (in der WIN32.HLP nicht dokumentiert), ist das noch eine ganze Menge Arbeit. Sollte ich vor Ende des Jahres nicht fertigwerden, werde ich versuchen, die Datei mal von irgendwo anders aus zu posten.
PS: Das Erstellen komplett neuer ACLs z.B. für eigene Dateien und Registryschlüssel (Parameter 0) und das Hinzufügen von ACEs im Prozeßbereich funktioniert schon perfekt - zum hinzufügen von ACEs zu vorhandenen ACLs in der Registry und im Dateisystem würde ich die Sache so aber noch nicht verwenden. |
| | | | |
| | | Neue Version: 1.) Vererbung wird unterstützt. 2.) Automatische Vererbung wird unterstützt. 3.) Sortierreihenfolge der ACEs wurde auf Windows2000/XP Standard angepaßt. 4.) Include wurde auf ca. ein fünftel der vorherigen Größe gekürzt. |
| 24 kB | | Kurzbeschreibung: | Includes zum Setzen von Zugriffsrechten in einem Security-Descriptor Version 7 | | Hochgeladen: | 20.12.2005 | | Ladeanzahl: | | | | Herunterladen |
| | | | |
| | | Nochmals Änderung: - Ein Bug wurde beseitigt - Auslesen ist nun möglich: Unten Quelltextbeispiel (keine Angst, ändert nichts!)
$I DACL_SET.INC
DEF @GetSysColor(1) !"USER32","GetSysColor"
DEF @GetDlgCtrlID(1) !"USER32","GetDlgCtrlID"
DEF @ButtonClicked(1) @GetDlgCtrlID(@&(1))=-%MENUITEM
Declare Auslesen&,Ordnername&,Ordnername$,ACE_MERKER&,Rechte_ART&,Select$
Declare 1&,2&,4&,8&,10&,20&,40&,80&,100&,10000&,20000&,40000&,80000&,100000&,20000000&,40000000&,80000000&,10000000&
Declare Beschränkter&,Ererbt&,Vererbungsart&,AUSWAHL$
Declare Vererbungsart&,Vererbt&,Username&,Automatische_Vererbung&,Block&,EIGENTÜMER&,ACE_NUMMER&
Declare Gewählter_ACE$,USERS$,Gültig&
Declare Text#,Tool#,Tool&
dim Text#,262
dim Tool#,40
Windowstyle 31+512
Windowtitle "Rechte einer Datei auslesen"
Window 0,0-640,440
SETTRUECOLOR 1
CLS @GETSYSCOLOR(15)
USERMESSAGES $10
Usefont "Arial",17,5,1,0,0
SetDialogFont %FONT
LET Ordnername&=@Control("STATIC","Kein Ordner ausgewählt!",$40000000+$10000000+$1000,110,5,505,20,%HWND,5000,%HINSTANCE)
LET Auslesen&=@CREATEBUTTON(%HWND,"Ordner wählen",5,5,100,25)
@Createtext(%HWND,"Eigentümer:",5,65,60,25)
LET EIGENTÜMER&=@CREATECHOICEBOX(%HWND,"",70,60,150,100)
LET Automatische_Vererbung&=@CreateCheckBox(%HWND,"Vererbbare Rechte automatisch weitergeben",5,30,300,25)
LET Block&=@CreateCheckBox(%HWND,"Vererbung abblocken",305,30,120,25)
LET Ererbt&=@Control("STATIC","",$40000000+$10000000+$1000,440,30,150,20,%HWND,5002,%HINSTANCE)
@Createtext(%HWND,"ACE auswählen:",300,65,100,25)
LET ACE_NUMMER&=@Control("ComboBox","",$40000000+$10000000+$200000+$100000+$3+$200,380,60,90,200,%HWND,5001,%HINSTANCE)
@Createtext(%HWND,"User/Gruppe:",5,95,70,25)
LET Beschränkter&=@CREATECHOICEBOX(%HWND,"",75,90,150,100)
@Createtext(%HWND,"Art des Rechtes:",250,95,100,25)
LET Rechte_ART&=@CREATECHOICEBOX(%HWND,"",350,90,150,100)
@AddChoice(Rechte_ART&,"Erlaubnis")
@AddChoice(Rechte_ART&,"Verbot")
@AddChoice(Rechte_ART&,"Konnte nicht gelesen werden")
LET Vererbungsart&=@CREATECHOICEBOX(%HWND,"",350,120,205,100)
@AddChoice(Vererbungsart&,"Keine Vererbung")
@AddChoice(Vererbungsart&,"Vererbung an Dateien")
@AddChoice(Vererbungsart&,"Vererbung an Unterordner")
@AddChoice(Vererbungsart&,"Vererbung an Dateien und Unterordner")
LET gültig&=@CREATECHOICEBOX(%HWND,"",350,150,245,100)
@AddChoice(gültig&,"Gültig für aktuellen Ordner")
@AddChoice(gültig&,"Gültig nur für Kindobjekte")
Let 1&=@CreateCheckBox(%HWND,"Unterordner listen",5,125,120,25)
Let 2&=@CreateCheckBox(%HWND,"Dateien erstellen",5,150,120,25)
Let 4&=@CreateCheckBox(%HWND,"Ordner erstellen",5,175,120,25)
Let 8&=@CreateCheckBox(%HWND,"Erweiterte Attribute lesen",5,200,150,25)
Let 10&=@CreateCheckBox(%HWND,"Erweiterte Attribute schreiben",5,225,150,25)
Let 20&=@CreateCheckBox(%HWND,"Ordner durchsuchen",5,250,150,25)
Let 40&=@CreateCheckBox(%HWND,"Unterordner löschen",5,275,150,25)
Let 80&=@CreateCheckBox(%HWND,"Attribute lesen",5,300,150,25)
Let 100&=@CreateCheckBox(%HWND,"Attribute schreiben",5,325,150,25)
LET 10000&=@CreateCheckBox(%HWND,"Ordner löschen",200,125,120,25)
LET 20000&=@CreateCheckBox(%HWND,"Zugriffsrechte lesen",200,150,150,25)
LET 40000&=@CreateCheckBox(%HWND,"Zugriffsrechte schreiben",200,175,150,25)
LET 80000&=@CreateCheckBox(%HWND,"Eigentümer ändern",200,200,200,25)
LET 100000&=@CreateCheckBox(%HWND,"Auf Rückgabe des Handles warten",200,225,200,25)
LET 80000000&=@CreateCheckBox(%HWND,"Vererbtes generelles Leserecht",200,275,200,25)
LET 40000000&=@CreateCheckBox(%HWND,"Vererbtes generelles Schreibrecht",200,300,200,25)
LET 20000000&=@CreateCheckBox(%HWND,"Vererbtes generelles Recht zum Durchsuchen/Ausführen",200,325,290,25)
LET 10000000&=@CreateCheckBox(%HWND,"Vererbter genereller Vollzugriff",200,350,200,25)
LET Tool&=@control("tooltips_class32","",$d0000000,0,0,0,0,%HWND,0,%hinstance)
long Tool#,0=40 ------Größe der TOOLINFO-Struktur
long Tool#,4=17 ------Flags
long Tool#,36=Text# --Bereichsvariable mit String
String Text#,0="Ordner wählen und hier einen ACE auswählen, alles andere so lassen!!!" ---Text des 1.Tooltips
long Tool#,12=ACE_NUMMER&
@Sendmessage(Tool&,1028,0,Tool#) ------Tipp initialisieren
String Text#,0="Hier einen Ordner wählen und dann ACE auswahlen, alles andere so lassen!!!" ---Text des 1.Tooltips
long Tool#,12=Auslesen&
@Sendmessage(Tool&,1028,0,Tool#) ------Tipp initialisieren
Dispose Text#
Dispose Tool#
@SetFocus(%HWND)
While %UMESSAGE<>$10
Waitinput
IF @ButtonClicked(Auslesen&)
LET Ordnername$=@ChooseDir$("Bitte Ordner zum Auslesen der Rechte auswählen")
IF @AND(@RIGHT$(Ordnername$,1)="",@LEN(Ordnername$)>3)
LET ORDNERname$=@LEFT$(Ordnername$,@LEN(Ordnername$)-1)
endif
Settext Ordnername&,Ordnername$
Set_File_ACE_IN_DACL Ordnername$,"Administrator","","WRITE_DAC",0,0
@Sendmessage(EIGENTÜMER&,$14B,0,0)
@AddChoice(EIGENTÜMER&,ACE$[0,1])
@Sendmessage(EIGENTÜMER&,$14E,0,0)
@Sendmessage(ACE_NUMMER&,$14B,0,0)
IF @VAL(ACE$[0,0]) | $400 = @VAL(ACE$[0,0])
SetCheck Automatische_Vererbung&,1
else
SetCheck Automatische_Vererbung&,0
endif
IF @VAL(ACE$[0,0]) | $1000 = @VAL(ACE$[0,0])
SetCheck Block&,1
else
SetCheck Block&,0
endif
LET ACE_MERKER&=1
While @AND(ACE_MERKER&<@VAL(ACE$[0,2])+1,ACE_MERKER&<=ACE_ARRAY_GRÖßE%)
@AddChoice(ACE_NUMMER&,@STR$(ACE_MERKER&))
LET ACE_MERKER&=ACE_MERKER&+1
wend
IF @VAL(ACE$[0,2])+1>ACE_ARRAY_GRÖßE%
@Messagebox("Es konnten nicht alle ACEs ausgelesen werden!","ACE-Array zu klein dimensioniert!",16)
endif
Endif
IF @Gettext$(ACE_NUMMER&)=""
@Sendmessage(ACE_NUMMER&,$14E,0,0)
endif
IF Gewählter_ACE$<>@Gettext$(ACE_NUMMER&)
let Gewählter_ACE$=@Gettext$(ACE_NUMMER&)
LET ACE_MERKER&=@VAL(Gewählter_ACE$)
IF @INSTR(ACE$[ACE_MERKER&,3]+",",USERS$)=0
@ADDCHOICE(Beschränkter&,ACE$[ACE_MERKER&,3])
LET USERS$=USERS$+ACE$[ACE_MERKER&,3]+","
endif
@SENDMESSAGE(Beschränkter&,$14E,@Sendmessage(Beschränkter&,$158,-1,@ADDR(ACE$[ACE_MERKER&,3])),0)
IF ACE$[ACE_MERKER&,1]="0"
Let Select$="Erlaubnis"
Elseif ACE$[ACE_MERKER&,1]="1"
Let Select$="Verbot"
Else
Let Select$="Konnte nicht gelesen werden"
endif
@SENDMESSAGE(Rechte_ART&,$14E,@Sendmessage(Rechte_ART&,$158,-1,@ADDR(Select$)),0)
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$1)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 1&,1
else
Setcheck 1&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$2)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 2&,1
else
Setcheck 2&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$4)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 4&,1
else
Setcheck 4&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$8)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 8&,1
else
Setcheck 8&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$10)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 10&,1
else
Setcheck 10&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$20)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 20&,1
else
Setcheck 20&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$40)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 40&,1
else
Setcheck 40&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$80)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 80&,1
else
Setcheck 80&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$100)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 100&,1
else
Setcheck 100&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$10000)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 10000&,1
else
Setcheck 10000&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$20000)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 20000&,1
else
Setcheck 20000&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$40000)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 40000&,1
else
Setcheck 40000&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$80000)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 80000&,1
else
Setcheck 80000&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$100000)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 100000&,1
else
Setcheck 100000&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$10000000)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 10000000&,1
else
Setcheck 10000000&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$20000000)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 20000000&,1
else
Setcheck 20000000&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$40000000)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 40000000&,1
else
Setcheck 40000000&,0
endif
IF @OR(@VAL(ACE$[ACE_MERKER&,4]),$80000000)=@VAL(ACE$[ACE_MERKER&,4])
Setcheck 80000000&,1
else
Setcheck 80000000&,0
endif
IF @VAL(ACE$[ACE_MERKER&,2]) | $10 = @VAL(ACE$[ACE_MERKER&,2])
Settext Ererbt&,"Rechte sind ererbt"
else
Settext Ererbt&,"Rechte sind nicht ererbt"
endif
IF @VAL(ACE$[ACE_MERKER&,2]) | $3 = @VAL(ACE$[ACE_MERKER&,2])
LET AUSWAHL$="Vererbung an Dateien und Unterordner"
Elseif @VAL(ACE$[ACE_MERKER&,2]) | $1 = @VAL(ACE$[ACE_MERKER&,2])
LET AUSWAHL$="Vererbung an Dateien"
Elseif @VAL(ACE$[ACE_MERKER&,2]) | $2 = @VAL(ACE$[ACE_MERKER&,2])
LET AUSWAHL$="Vererbung an Unterordner"
Else
LET AUSWAHL$="Keine Vererbung"
endif
@SENDMESSAGE(Vererbungsart&,$14E,@Sendmessage(Vererbungsart&,$158,-1,@ADDR(Auswahl$)),0)
IF @VAL(ACE$[ACE_MERKER&,2]) | $8 = @VAL(ACE$[ACE_MERKER&,2])
LET AUSWAHL$="Gültig nur für Kindobjekte"
Else
LET AUSWAHL$="Gültig für aktuellen Ordner"
endif
@SENDMESSAGE(Gültig&,$14E,@Sendmessage(Gültig&,$158,-1,@ADDR(Auswahl$)),0)
endif
wend
Viel Spaß damit, aber erst neue Version herunterladen! |
| 31 kB | | Kurzbeschreibung: | Zugriffsrechte von Objekten setzen, Version 8.3 | | Hochgeladen: | 25.12.2005 | | Ladeanzahl: | | | | Herunterladen |
| | | | |
| | | Habe mir beim Einbau der automatischen Vererbung einen ganz dicken Bug eingebaut (rechte wurde immer ererbt, auch wenn das im original nicht so eingestellt war). Ich will hoffen, das der Fehler jetzt beseitigt ist. Habe einen Beitrag weiter oben ein Update gemacht. Wie man im Beispiel oben schon sehen kann, ist für die Zukunft auch das Abspeichern des ACE Arrays und damit das editieren von Rechten mit der DACL_SET.INC geplant.
Der Einbau des Setzens von Token-Zugriffsrechten ist ebenfalls noch geplannt. Threads werden auch kommen. |
| | | | |
| | | Nochmals Update gemacht (Version 8.2) und 2 Probleme beseitigt:
1.) Parameter U funzte nicht (falschen Flag angegeben) 2.) CreateFile benötigt anscheinend immer das Zugriffsrecht SYNCRONIZE. Es reichen die Rechte WRITE_DAC und READ_CONTROL also zum Erhalten eines Filehandles nicht aus. Das heißt im Klartext: Obwohl man Eigentümer eines Objektes ist, kann man mit SetSecurityInfo die Zugriffsrechte nicht ändern, wenn man das Recht SYNCRONIZE nicht zusätzlich besitzt. Also => neue APIs Ge-/SetNamedSecurityInfo wurde eingebaut, dann gehts bei Dateien mit weniger Rechten... |
| | | | |
| | Michael Wodrich | | | | Programmieren, das spannendste Detektivspiel der Welt. | 25.12.2005 ▲ |
| |
|
AntwortenThemenoptionen | 9.899 Betrachtungen |
ThemeninformationenDieses Thema hat 2 Teilnehmer: |