Forum | | | | | Hallo Profaner...
Noch einmal was zum Testen unter NT/2000/XP: KompilierenMarkierenSeparierenDEF @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @GetLastError(0) !"KERNEL32","GetLastError"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
Declare Fehler&
Proc GET_JEDER
Declare SYS$,SEC_ID#,CBNAME_SIZE#,CBNAME#,ReferencedDomainName#,RDN_SIZE#
Declare SID_NAME_USE#
DIM SEC_ID#,12
DIM CBNAME_SIZE#,4
DIM CBNAME#,256
DIM ReferencedDomainName#,256
DIM RDN_SIZE#,4
DIM SID_NAME_USE#,4
Clear SYS$,SID_NAME_USE#,CBNAME#,ReferencedDomainName#,SEC_ID#
LONG SEC_ID#,0=257
LONG SEC_ID#,4=16777216
LONG SEC_ID#,8=0
LONG CBNAME_SIZE#,0=255
LONG RDN_SIZE#,0=255
LET Fehler&=@IsValidSid(SEC_ID#)
ADDSTRING "Fehlercode IsValidSid="+@STR$(FEHLER&)
ADDSTRING "Letzter API Fehler="+@STR$(@GetLastError())
LET FEHLER&=@LookupAccountSid(@ADDR(SYS$),SEC_ID#,CBNAME#,CBNAME_SIZE#,ReferencedDomainName#,RDN_SIZE#,SID_NAME_USE#)
ADDSTRING "Fehlercode LookupAccountSid="+@STR$(FEHLER&)
ADDSTRING "Letzter API Fehler="+@STR$(@GetLastError())
ADDSTRING @STRING$(CBNAME#,0)
Dispose SID_NAME_USE#
Dispose RDN_SIZE#
Dispose ReferencedDomainName#
Dispose CBNAME#
DISPOSE SEC_ID#
DISPOSE CBNAME_SIZE#
endproc
GET_JEDER
@Editbox("Rückgaben",1)
Wird überall ein String zurückgegeben? Wie sieht es mit US-Systemen aus? |
| | | | |
| | | Ich erhalte dies: [box:f2ad52123f]Fehlercode IsValidSid=1 Letzter API Fehler=0 Fehlercode LookupAccountSid=1 Letzter API Fehler=997 Jeder[/box:f2ad52123f]Salve. |
| | | | |
| | CB | Bei mir völlig identisches Resultat.
Christian |
| | | | |
| | | OK...
Das Problem scheint also auch gelöst zu sein - an Jeder komme ich jetzt ran... |
| | | | |
| | | Zum Hintergrund:
Um jedem User eines Systems z.B. den Zugriff auf eine allgemeine Datenbank zu erlauben, muß ich eine Gruppe angeben, der wirklich jeder registrierte User angehört. Aus der Beschreibung der Bestandteile eines SIDs und dem String-SID nehme ich an, daß der SID für die Gruppe Jeder auf allen Systemen gleich sein dürfte. Ich habe also einen SID Jeder per Hand erstellt. Aus diesem SID habe ich dann den Gruppennamen von Jeder ermittelt - der muß ja nicht immer Jeder sein, sondern wird auf jedenfall zumindestens von der Sprache des Betriebssystems abhängen. Aus euren Rückmeldungen entnehme ich erst einmal, daß die Sache wirklich so funktioniert, wie ich sie verstanden habe.
Warum so viele Zwischentests? Ich verfüge hier nur über eine sehr kleine NTFS Partition, und die liegt nicht auf der Festplatte, auf der sich mein Betriebssystem befindet. Da ohne Tests genauere Aussagen zu treffen ob wirklich etwas klappt, ist sehr schwierig.
Wenn alles klappt, wird es am Ende dieses Wochenendes (dann habe ich wieder etwas Zeit, ungestört zu proggen) eine Prozedur geben, die von einem Adminaccount aus unter anderem eine Datei oder einen Ordner für alle Nutzer eines Systems freigeben kann und nur das Löschen der Datei verhindert.
PS: Was für Dateien gilt, ist auch 1:1 auf die Registry übertragbar. Es ist also unter NT möglich, Registry Keys gegen Fremdnutzung zu sperren, deren Aufrufe aufzeichnen zu lassen oder Keys allen Benutzern freizugeben... |
| | | | |
| | | Die erste Testversion der PROC zum setzen der Security ist fertig! Bitte nur mit eigens dafür erzeugten Files testen! Hoffe auf reichlich Rückmeldungen... KompilierenMarkierenSeparierenDEF @SetFileSecurity(3) !"ADVAPI32","SetFileSecurityA"
DEF @InitializeSecurityDescriptor(2) !"ADVAPI32","InitializeSecurityDescriptor"
DEF @SetSecurityDescriptorDacl(4) !"ADVAPI32","SetSecurityDescriptorDacl"
DEF @AddAce(5) !"ADVAPI32","AddAce"
DEF @LookupAccountName(7) !"advapi32","LookupAccountNameA"
DEF @GetFileSecurity(5) !"ADVAPI32","GetFileSecurityA"
DEF @GetLastError(0) !"KERNEL32","GetLastError"
DEF @SetLastError(1) !"KERNEL32","SetLastError"
DEF @LookupPrivilegeName(4)!"advapi32","LookupPrivilegeNameA" Ermittelt aus dem Luid eines Privilegs dessen Namen.
DEF @LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA" Ermittelt aus dem Namen eines Privilegs dessen Luid.
DEF @OpenProcessToken(3) !"advapi32","OpenProcessToken" Öffnet Einstellprozess.
DEF @AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges" Stellt Privilegien ein.
DEF @GetCurrentProcess(0) !"kernel32","GetCurrentProcess" Ermittel das Handle des aktiven Prozesses.
DEF @CloseHandle(1) !"kernel32","CloseHandle" Schließt ein Handle (Programm).
Def @GetVolumeInformation(8) !"KERNEL32","GetVolumeInformationA"
DEF @GetSecurityDescriptorOwner(3) !"ADVAPI32","GetSecurityDescriptorOwner"
DEF @GetSecurityDescriptorGroup(3) !"ADVAPI32","GetSecurityDescriptorGroup"
DEF @GetSecurityDescriptorDACL(4) !"ADVAPI32","GetSecurityDescriptorDacl"
DEF @GetSecurityDescriptorSACL(4) !"ADVAPI32","GetSecurityDescriptorSacl"
DEF @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
DEF @IsValidAcl(1) !"ADVAPI32","IsValidAcl"
DEF @GetAclInformation(4) !"ADVAPI32","GetAclInformation"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @GetAce(3) !"ADVAPI32","GetAce"
DEF @ConvertSidToStringSid(2) !"ADVAPI32","ConvertSidToStringSidA"
DEF @LocalFree(1) !"KERNEL32","LocalFree"
DEF @InitializeAcl(3) !"ADVAPI32","InitializeAcl"
Declare Fehler&
Proc GET_Group_Name
Parameters Name$
Declare SYS$,SEC_ID#,CBNAME_SIZE#,CBNAME#,ReferencedDomainName#,RDN_SIZE#
Declare SID_NAME_USE#,CBNAME$
SID wird erstellt.
IF @UPPER$(Name$)="JEDER"
DIM SEC_ID#,12
ElseIF @UPPER$(Name$)="ADMINISTRATOREN"
DIM SEC_ID#,16
else
DIM SEC_ID#,12
@Messagebox("Falscher Parameter!","Fehler",16)
endif
DIM CBNAME_SIZE#,4
DIM CBNAME#,256
DIM ReferencedDomainName#,256
DIM RDN_SIZE#,4
DIM SID_NAME_USE#,4
Clear SYS$,SID_NAME_USE#,CBNAME#,ReferencedDomainName#,SEC_ID#
IF @UPPER$(Name$)="JEDER"
LONG SEC_ID#,0=257
LONG SEC_ID#,4=16777216
LONG SEC_ID#,8=0
elseIF @UPPER$(Name$)="ADMINISTRATOREN"
LONG SEC_ID#,0=513
LONG SEC_ID#,4=83886080
LONG SEC_ID#,8=32
LONG SEC_ID#,12=544
endif
LONG CBNAME_SIZE#,0=255
LONG RDN_SIZE#,0=255
LET Fehler&=@IsValidSid(SEC_ID#)
ADDSTRING "Fehlercode IsValidSid="+@STR$(FEHLER&)
ADDSTRING "Letzter API Fehler="+@STR$(@GetLastError())
CASE FEHLER&=1 : LET FEHLER&=@LookupAccountSid(@ADDR(SYS$),SEC_ID#,CBNAME#,CBNAME_SIZE#,ReferencedDomainName#,RDN_SIZE#,SID_NAME_USE#)
ADDSTRING "Fehlercode LookupAccountSid="+@STR$(FEHLER&)
ADDSTRING "Letzter API Fehler="+@STR$(@GetLastError())
ADDSTRING @STRING$(CBNAME#,0)
LET CBNAME$=@STRING$(CBNAME#,0)
Dispose SID_NAME_USE#
Dispose RDN_SIZE#
Dispose ReferencedDomainName#
Dispose CBNAME#
DISPOSE SEC_ID#
DISPOSE CBNAME_SIZE#
Return CBNAME$
endproc
Proc Set_ACE_IN_DACL
Parameters FileName$,User$,Hinzu_entfernen$,FSFlags$
1.Parameter= Dateiname
2.Parameter= Username
3.Parameter= +;-;0 (+=Rechte entfernen, -=hinzufügen, 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)
ADDSTRING "****PROZEDUR gestartet****"
IF Filename$<>""
Declare NEW_ACL1#,SIDA#
Declare PSECURITY_DESCRIPTOR#,Needed#,Needed&
Declare Laufwerk$,Label#,LFLAGS#,DAT#
DEclare SID#,GFLAG#,System$,FSFlags&
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare Test&,ANZAHL_BYTES&
Declare ACL_PRESENT#,P_ACL#,ACL_D#
Declare ACL_INFO#,Zähler&,ACE#,P_ACE#,ACE_SIZE&,STRSID#,P_STRSID#
Declare SID2#,IO%,SecFlag&,ACCESS_MASK&
Declare Vorhanden&,Needed#,SecFlag&,NEEDED&
Declare PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare ACE_ZÄHLER%,SIZE_ACCOUNT&
LET FSFlags&=0
LET LAUFWERK$=@LEFT$(Filename$,3)
DIM Label#,256
DIM LFLAGS#,4
DIM DAT#,256
DIM STRSID#,256
DIM P_STRSID#,4
DIM Needed#,4
ADDSTRING "Gewählte Datei="+Filename$
ADDSTRING "Gruppenname/Username="+USER$
ADDSTRING "Zu Addierende Rechte="+FSFLAGS$
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET FEHLER&=@GetVolumeInformation(@ADDR(Laufwerk$),Label#,256,0,0,LFlags#,DAT#,256)
ADDSTRING "Rückgabe von GetVolumeInformation="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Laufwerksflags="+@BIN$(@LONG(LFLAGS#,0))
ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
IF @LONG(LFLAGS#,0) | $8 = @LONG(LFLAGS#,0)
DIM SIDa#,1
ADDSTRING "Zugriff ist einschränkbar"
LET SECFLAG&=$1 | $2 | $4
Clear Needed#
LET Fehler&=@GetFileSecurity(@ADDR(Filename$),SecFlag&,0,0,Needed#)
ADDSTRING "Rückgabe von GetFileSecurity="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET NEEDED&=@LONG(Needed#,0)
ADDSTRING "Erforderliche Länge des Security Descriptor="+@STR$(Needed&)
CASE NEEDED&=0 : LET NEEDED&=1024
DIM PSECURITY_DESCRIPTOR#,Needed&
Clear PSECURITY_DESCRIPTOR#
@SetLastError(0)
LET Fehler&=@GetFileSecurity(@ADDR(Filename$),SECFLAG&,PSECURITY_DESCRIPTOR#,NEEDED&,Needed#)
ADDSTRING "Rückgabe von GetFileSecurity="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR#)
ADDSTRING "Rückgabe von IsValidSecurityDescriptor="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
DIM ACL_PRESENT#,1
DIM P_ACL#,4
DIM ACL_D#,4
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let Fehler&=@GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
ADDSTRING "Rückgabe von GetSecurityDescriptorDacl="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@IsValidAcl(@long(P_ACL#,0))
ADDSTRING "Rückgabe von IsValidAcl für den DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
IF @LONG(ACL_PRESENT#,0)=1
ADDSTRING "DACL ist vorhanden!"
else
ADDSTRING "DACL ist nicht vorhanden!"
endif
LET ANZAHL_BYTES&=8 Für ACL HEADER 8 Bytes veranschlagt
IF @AND(Fehler&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let Fehler&=@GetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
ADDSTRING "Rückgabe von GetAclInformation="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Anzahl benutzter Bytes in DACL="+@STR$(@LONG(ACL_INFO#,4))
ADDSTRING "Anzahl freier Bytes in DACL="+@STR$(@LONG(ACL_INFO#,8))
ADDSTRING "ACEs in DACL="+@STR$(@LONG(ACL_INFO#,0))
LET Zähler&=0
DIM ACCOUNT_NAME#,256
DIM SIZE_ACCOUNT#,4
DIM Domain#,256
DIM SIZE_DOMAIN#,4
DIM SID_NAME_USE#,4
IF @STR$(@LONG(ACL_INFO#,0))<>0
While Zähler&<@LONG(ACL_INFO#,0)
Clear P_ACE#
Let Fehler&=@GetAce(@long(P_ACL#,0),Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@CopyMemory(ACE#,@LONG(P_ACE#,0),4)
LET ACE_SIZE&=@Word(ACE#,2) Die Größen aller ACEs werden addiert.
ADDSTRING "Größe des "+@STR$(@INT(Zähler&+1))+".ACEs="+@STR$(@Word(ACE#,2))
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Clear ACE#
Long SIZE_ACCOUNT#,0=255
LONG SIZE_DOMAIN#,0=255
@CopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
IF @BYTE(ACE#,0)=0
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=ACCESS_ALLOWED_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=1
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=ACCESS_DENIED_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=2
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=SYSTEM_AUDIT_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=3
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=SYSTEM_ALARM_ACE"
endif
DIM SID2#,ACE_SIZE&-8
@CopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET FEHLER&=@LookupAccountSid(@ADDR(SYSTEM$),SID2#,ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Rückgabe von LookupAccountSid="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Reset des API-Fehlers wird durchgeführt"
@SetLastError(0)
LET IO%=%IORESULT
Clear STRSID#
IF @VAL(@LEFT$($WINVER,3))>=5.0
LET FEHLER&=@ConvertSidToStringSid(SID2#,P_STRSID#)
@CopyMemory(STRSID#,@LONG(P_STRSID#,0),255)
ADDSTRING "Rückgabe von ConvertSidToStringSid="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@LocalFree(@LONG(P_STRSID#,0))
ADDSTRING "Rückgabe von LocalFree für den String-SID="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "String-SID des "+@STR$(@int(Zähler&+1))+". ACEs="+@STRING$(STRSID#,0)
endif
ADDSTRING @STR$(@int(Zähler&+1))+". ACE Bezogen auf SID="+@String$(ACCOUNT_NAME#,0)
IF @UPPER$(@String$(ACCOUNT_NAME#,0))=@UPPER$(USER$)
IF @AND(@BYTE(ACE#,0)=0,@INSTR("+",Hinzu_entfernen$)>0)
LET VORHANDEN&=@or(VORHANDEN&,1)
endif
IF @AND(@BYTE(ACE#,0)=1,@INSTR("-",Hinzu_entfernen$)>0)
LET VORHANDEN&=@or(VORHANDEN&,2)
endif
endif
ADDSTRING @STR$(@int(Zähler&+1))+". ACE Bezogen auf Domainname="+@String$(Domain#,0)
ADDSTRING "Accessrechte des "+@STR$(@int(Zähler&+1))+". ACEs=$"+@HEX$(@LONG(ACE#,4))
LET ACCESS_MASK&=@LONG(ACE#,4)
IF @or(ACCESS_MASK&,$1F01FF)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_ALL_ACCESS (Vollzugriff)"
LET ACCESS_MASK&=ACCESS_MASK&-$1F01FF
endif
IF @or(ACCESS_MASK&,$1)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen)"
LET ACCESS_MASK&=ACCESS_MASK&-$1
endif
IF @or(ACCESS_MASK&,$2)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_WRITE_DATA (Erlaubt Daten zu Scheiben)"
LET ACCESS_MASK&=ACCESS_MASK&-$2
endif
IF @or(ACCESS_MASK&,$4)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_APPEND_DATA (Erlaubt Daten anzuhängen)"
LET ACCESS_MASK&=ACCESS_MASK&-$4
endif
IF @or(ACCESS_MASK&,$8)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen)"
LET ACCESS_MASK&=ACCESS_MASK&-$8
endif
IF @or(ACCESS_MASK&,$10)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_WRITE_EA (Erlaubt erweiterte Attribute zu schreiben)"
LET ACCESS_MASK&=ACCESS_MASK&-$10
endif
IF @or(ACCESS_MASK&,$20)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_EXECUTE (Erlaubt eine Datei auszuführen)"
LET ACCESS_MASK&=ACCESS_MASK&-$20
endif
IF @or(ACCESS_MASK&,$80)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute)"
LET ACCESS_MASK&=ACCESS_MASK&-$80
endif
IF @or(ACCESS_MASK&,$100)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_WRITE_ATTRIBUTES (Ändern der Fileattribute)"
LET ACCESS_MASK&=ACCESS_MASK&-$100
endif
IF @or(ACCESS_MASK&,$00040000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=WRITE_DAC (Ändern der DACL Einträge)"
LET ACCESS_MASK&=ACCESS_MASK&-$00040000
endif
IF @or(ACCESS_MASK&,$00020000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=READ_CONTROL (Lesen der DACL Einträge und Besitzer)"
LET ACCESS_MASK&=ACCESS_MASK&-$00020000
endif
IF @or(ACCESS_MASK&,$00100000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten)"
LET ACCESS_MASK&=ACCESS_MASK&-$00100000
endif
IF @or(ACCESS_MASK&,$40)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=File_Delete_Child (Erlaubt einen Unterordner zu löschen - für Dateien keine Bedeutung)"
LET ACCESS_MASK&=ACCESS_MASK&-$40
endif
IF @or(ACCESS_MASK&,$01000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=ACCESS_SYSTEM_SECURITY (Erlaubt den Zugriff auf den SACL)"
LET ACCESS_MASK&=ACCESS_MASK&-$01000000
endif
IF @or(ACCESS_MASK&,$10000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=GENERIC_ALL"
LET ACCESS_MASK&=ACCESS_MASK&-$10000000
endif
IF @or(ACCESS_MASK&,$20000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=GENERIC_EXECUTE"
LET ACCESS_MASK&=ACCESS_MASK&-$20000000
endif
IF @or(ACCESS_MASK&,$40000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=GENERIC_WRITE"
LET ACCESS_MASK&=ACCESS_MASK&-$40000000
endif
IF @or(ACCESS_MASK&,$80000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=GENERIC_READ"
LET ACCESS_MASK&=ACCESS_MASK&-$80000000
endif
IF @or(ACCESS_MASK&,$80000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=WRITE_OWNER (Eigentümer ändern)"
LET ACCESS_MASK&=ACCESS_MASK&-$80000
endif
IF @or(ACCESS_MASK&,$00010000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=_DELETE (Datei löschen)"
LET ACCESS_MASK&=ACCESS_MASK&-$00010000
endif
IF ACCESS_MASK&>0
ADDSTRING "Nicht berechnete Rechte="+@STR$(ACCESS_MASK&)+" ($"+@HEX$(ACCESS_MASK&)+")"
endif
LET Zähler&=Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
Clear SID_NAME_USE#,ACCOUNT_NAME#,Domain#,SIDa#,System$
Long SIZE_ACCOUNT#,0=1
LONG SIZE_DOMAIN#,0=255
LET Fehler&=@LookupAccountName(@ADDR(SYSTEM$),@addr(USER$),SIDa#,SIZE_ACCOUNT#,DOMAIN#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Rückgabe von LookupAccountName für "+User$+"="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Länge des SIDs="+@STR$(@LONG(SIZE_ACCOUNT#,0))
LET SIZE_ACCOUNT&=@LONG(SIZE_ACCOUNT#,0)
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Long SIZE_ACCOUNT#,0=SIZE_ACCOUNT&
LONG SIZE_DOMAIN#,0=255
Dispose SIDa#
DIM SIDa#,SIZE_ACCOUNT&
LET Fehler&=@LookupAccountName(@ADDR(SYSTEM$),@addr(USER$),SIDa#,SIZE_ACCOUNT#,DOMAIN#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Rückgabe von LookupAccountName für "+User$+"="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Länge des SIDs="+@STR$(@LONG(SIZE_ACCOUNT#,0))
IF VORHANDEN&=0
LET Anzahl_Bytes&=Anzahl_Bytes&+@LONG(SIZE_ACCOUNT#,0)+8 Alle ACEs+SID+ACCESS_MASK+ACE_HEADER
endif
IF @INSTR("0",Hinzu_entfernen$)>0
LET Anzahl_Bytes&=@LONG(SIZE_ACCOUNT#,0)+8+8 SID+ACCESS_MASK+ACE_HEADER+ACL_HEADER
endif
Dispose ACCOUNT_NAME#
Dispose SIZE_ACCOUNT#
Dispose Domain#
Dispose SIZE_DOMAIN#
Dispose SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
Endif
ADDSTRING "Bytes für ACL="+@STR$(Anzahl_Bytes&)
DIM NEW_ACL1#,Anzahl_Bytes&
LET FEHLER&=@InitializeAcl(NEW_ACL1#,Anzahl_Bytes&,$2)
ADDSTRING "Rückgabe von InitializeAcl="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let Fehler&=@GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
ADDSTRING "Rückgabe von GetSecurityDescriptorDacl="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@IsValidAcl(@long(P_ACL#,0))
ADDSTRING "Rückgabe von IsValidAcl für den DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
IF @LONG(ACL_PRESENT#,0)=1
ADDSTRING "DACL ist vorhanden!"
else
ADDSTRING "DACL ist nicht vorhanden!"
endif
LET ACE_ZÄHLER%=0
IF @AND(Fehler&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let Fehler&=@GetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
ADDSTRING "Rückgabe von GetAclInformation="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Anzahl benutzter Bytes in DACL="+@STR$(@LONG(ACL_INFO#,4))
ADDSTRING "Anzahl freier Bytes in DACL="+@STR$(@LONG(ACL_INFO#,8))
ADDSTRING "ACEs in DACL="+@STR$(@LONG(ACL_INFO#,0))
LET Zähler&=0
DIM ACCOUNT_NAME#,256
DIM SIZE_ACCOUNT#,4
DIM Domain#,256
DIM SIZE_DOMAIN#,4
DIM SID_NAME_USE#,4
IF @STR$(@LONG(ACL_INFO#,0))<>0
While Zähler&<@LONG(ACL_INFO#,0)
Clear P_ACE#
Let Fehler&=@GetAce(@long(P_ACL#,0),Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@CopyMemory(ACE#,@LONG(P_ACE#,0),4)
ADDSTRING "Größe des "+@STR$(@INT(Zähler&+1))+".ACEs="+@STR$(@Word(ACE#,2))
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Clear ACE#
Long SIZE_ACCOUNT#,0=255
LONG SIZE_DOMAIN#,0=255
@CopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
IF @BYTE(ACE#,0)=0
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=ACCESS_ALLOWED_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=1
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=ACCESS_DENIED_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=2
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=SYSTEM_AUDIT_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=3
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=SYSTEM_ALARM_ACE"
endif
ADDSTRING "Vererbung="+@STR$(@BYTE(ACE#,1))
DIM SID2#,ACE_SIZE&-8
@CopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET FEHLER&=@LookupAccountSid(@ADDR(System$),SID2#,ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Rückgabe von LookupAccountSid="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Reset des API-Fehlers wird durchgeführt"
@SetLastError(0)
LET IO%=%IORESULT
Clear STRSID#
ADDSTRING @STR$(@int(Zähler&+1))+". ACE Bezogen auf SID="+@String$(ACCOUNT_NAME#,0)
ADDSTRING "Accessrechte des "+@STR$(@int(Zähler&+1))+". ACEs=$"+@HEX$(@LONG(ACE#,4))
LET ACCESS_MASK&=@LONG(ACE#,4)
IF @UPPER$(@String$(ACCOUNT_NAME#,0))=@UPPER$(USER$)
IF @BYTE(ACE#,0)=0
IF @INSTR("+",Hinzu_entfernen$)>0
CASE @INSTR("0",Hinzu_entfernen$)=0 : LET FSFlags&=ACCESS_MASK&
ElseIF @INSTR("-",Hinzu_entfernen$)>0
if @INSTR("0",Hinzu_entfernen$)=0
IF @AND(@or(ACCESS_MASK&,$1)=ACCESS_MASK&,@INSTR("FILE_READ_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$1
$B "FILE_READ_DATA drin"
endif
IF @AND(@or(ACCESS_MASK&,$2)=ACCESS_MASK&,@INSTR("FILE_WRITE_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$2
endif
IF @AND(@or(ACCESS_MASK&,$4)=ACCESS_MASK&,@INSTR("FILE_APPEND_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$4
endif
IF @AND(@or(ACCESS_MASK&,$8)=ACCESS_MASK&,@INSTR("FILE_READ_EA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$8
endif
IF @AND(@or(ACCESS_MASK&,$10)=ACCESS_MASK&,@INSTR("FILE_WRITE_EA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$10
endif
IF @AND(@or(ACCESS_MASK&,$20)=ACCESS_MASK&,@INSTR("FILE_EXECUTE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$20
endif
IF @AND(@or(ACCESS_MASK&,$80)=ACCESS_MASK&,@INSTR("FILE_READ_ATTRIBUTES",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$80
endif
IF @AND(@or(ACCESS_MASK&,$100)=ACCESS_MASK&,@INSTR("FILE_WRITE_ATTRIBUTES",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$100
endif
IF @AND(@or(ACCESS_MASK&,$00040000)=ACCESS_MASK&,@INSTR("WRITE_DAC",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00040000
endif
IF @AND(@or(ACCESS_MASK&,$00020000)=ACCESS_MASK&,@INSTR("READ_CONTROL",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00020000
endif
IF @AND(@or(ACCESS_MASK&,$00100000)=ACCESS_MASK&,@INSTR("SYNCHRONIZE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00100000
endif
IF @AND(@or(ACCESS_MASK&,$40)=ACCESS_MASK&,@INSTR("FILE_DELETE_CHILD",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$40
endif
IF @AND(@or(ACCESS_MASK&,$01000000)=ACCESS_MASK&,@INSTR("ACCESS_SYSTEM_SECURITY",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$01000000
endif
IF @AND(@or(ACCESS_MASK&,$80000)=ACCESS_MASK&,@INSTR("WRITE_OWNER",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$80000
endif
IF @AND(@or(ACCESS_MASK&,$00010000)=ACCESS_MASK&,@INSTR("F_DELETE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00010000
endif
ADDSTRING "Bei ALLOWED_ACE zu addierende Rechte=$"+@HEX$(ACCESS_MASK&)
LONG ACE#,4=ACCESS_MASK&
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER%,ACE#,ACE_SIZE&)
ADDSTRING "Rückgabe von AddAce="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
inc ACE_ZÄHLER%
ENDIF
endif
Elseif @BYTE(ACE#,0)=1
IF @INSTR("+",Hinzu_entfernen$)>0
IF @INSTR("0",Hinzu_entfernen$)=0
IF @AND(@or(ACCESS_MASK&,$1)=ACCESS_MASK&,@INSTR("FILE_READ_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$1
endif
IF @AND(@or(ACCESS_MASK&,$2)=ACCESS_MASK&,@INSTR("FILE_WRITE_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$2
endif
IF @AND(@or(ACCESS_MASK&,$4)=ACCESS_MASK&,@INSTR("FILE_APPEND_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$4
endif
IF @AND(@or(ACCESS_MASK&,$8)=ACCESS_MASK&,@INSTR("FILE_READ_EA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$8
endif
IF @AND(@or(ACCESS_MASK&,$10)=ACCESS_MASK&,@INSTR("FILE_WRITE_EA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$10
endif
IF @AND(@or(ACCESS_MASK&,$20)=ACCESS_MASK&,@INSTR("FILE_EXECUTE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$20
endif
IF @AND(@or(ACCESS_MASK&,$80)=ACCESS_MASK&,@INSTR("FILE_READ_ATTRIBUTES",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$80
endif
IF @AND(@or(ACCESS_MASK&,$100)=ACCESS_MASK&,@INSTR("FILE_WRITE_ATTRIBUTES",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$100
endif
IF @AND(@or(ACCESS_MASK&,$00040000)=ACCESS_MASK&,@INSTR("WRITE_DAC",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00040000
endif
IF @AND(@or(ACCESS_MASK&,$00020000)=ACCESS_MASK&,@INSTR("READ_CONTROL",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00020000
endif
IF @AND(@or(ACCESS_MASK&,$00100000)=ACCESS_MASK&,@INSTR("SYNCHRONIZE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00100000
endif
IF @AND(@or(ACCESS_MASK&,$40)=ACCESS_MASK&,@INSTR("FILE_DELETE_CHILD",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$40
endif
IF @AND(@or(ACCESS_MASK&,$01000000)=ACCESS_MASK&,@INSTR("ACCESS_SYSTEM_SECURITY",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$01000000
endif
IF @AND(@or(ACCESS_MASK&,$80000)=ACCESS_MASK&,@INSTR("WRITE_OWNER",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$80000
endif
IF @AND(@or(ACCESS_MASK&,$00010000)=ACCESS_MASK&,@INSTR("F_DELETE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00010000
endif
ADDSTRING "Bei DENIED_ACE zu addierende Rechte=$"+@HEX$(ACCESS_MASK&)
LONG ACE#,4=ACCESS_MASK&
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER%,ACE#,ACE_SIZE&)
ADDSTRING "Rückgabe von AddAce="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
inc ACE_ZÄHLER%
endif
ElseIF @INSTR("-",Hinzu_entfernen$)>0
IF @INSTR("0",Hinzu_entfernen$)=0
LONG ACE#,4=ACCESS_MASK&
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER%,ACE#,ACE_SIZE&)
ADDSTRING "Bei DENIED_ACE zu addierende Rechte=$"+@HEX$(ACCESS_MASK&)
ADDSTRING "Rückgabe von AddAce="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
inc ACE_ZÄHLER%
endif
endif
endif
else
IF @INSTR("0",Hinzu_entfernen$)=0
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER%,ACE#,ACE_SIZE&)
ADDSTRING "Rückgabe von AddAce="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
inc ACE_ZÄHLER%
endif
endif
LET Zähler&=Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
DIM ACE#,SIZE_ACCOUNT&+8
IF @INSTR("+",Hinzu_entfernen$)>0
Byte ACE#,0=0
ADDSTRING "Bei ALLOWED_ACE..."
ELSEIF @INSTR("-",Hinzu_entfernen$)>0
Byte ACE#,0=1
ADDSTRING "Bei DENIED_ACE..."
endif
IF @INSTR("FILE_READ_DATA",@UPPER$(FSFlags$))>0
LET FSFlags&=@OR(FSFLAGS&,$1)
endif
IF @INSTR("FILE_WRITE_DATA",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$2)
endif
IF @INSTR("FILE_APPEND_DATA",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$4)
endif
IF @INSTR("FILE_READ_EA",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$8)
endif
IF @INSTR("FILE_WRITE_EA",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$10)
endif
IF @INSTR("FILE_EXECUTE",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$20)
endif
IF @INSTR("FILE_DELETE_CHILD",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$40)
endif
IF @INSTR("FILE_READ_ATTRIBUTES",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$80)
endif
IF @INSTR("FILE_WRITE_ATTRIBUTES",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$100)
endif
IF @INSTR("F_DELETE",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$10000)
endif
IF @INSTR("READ_CONTROL",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$20000)
endif
IF @INSTR("WRITE_DAC",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$40000)
endif
IF @INSTR("SYNCHRONIZE",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$100000)
endif
IF @INSTR("ACCESS_SYSTEM_SECURITY",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$1000000)
endif
IF @INSTR("WRITE_OWNER",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$80000)
endif
Byte ACE#,1=0
WORD ACE#,2=SIZE_ACCOUNT&+8
LONG ACE#,4=FSFlags&
LET ZÄHLER&=0
ADDSTRING "...zu addierende Rechte=$"+@HEX$(FSFlags&)
WHILE ZÄHLER&<>SIZE_ACCOUNT&
BYTE ACE#,8+Zähler&=@BYTE(SIDa#,Zähler&)
LET ZÄHLER&=ZÄHLER&+1
WEND
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER%,ACE#,SIZE_ACCOUNT&+8)
ADDSTRING "Rückgabe von AddAce="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@IsValidAcl(NEW_ACL1#)
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET TEST&=NEW_ACL1#
LET FEHLER&=@InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR#,$1)
ADDSTRING "Rückgabe von InitializeSecurityDescriptor="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET FEHLER&=@SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,1,NEW_ACL1#,0)
ADDSTRING "Rückgabe von SetSecurityDescriptorDacl="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET FEHLER&=@SetFileSecurity(@ADDR(FileName$),$4,PSECURITY_DESCRIPTOR#)
ADDSTRING "Rückgabe von SetFileSecurity="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
DISPOSE ACE#
Dispose ACCOUNT_NAME#
Dispose SIZE_ACCOUNT#
Dispose Domain#
Dispose SIZE_DOMAIN#
Dispose SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
endif
Dispose PSECURITY_DESCRIPTOR#
Dispose Needed#
Dispose NEW_ACL1#
Dispose ACL_PRESENT#
Dispose P_ACL#
Dispose ACL_D#
Dispose SIDa#
else
ADDSTRING "Zugriff ist nicht einschränkbar"
@Messagebox("Der Zugriff auf die angegebene Datei ist nicht einschränkbar!","Zugriff nicht einschränkbar!",16)
endif
Dispose Label#
Dispose LFlags#
DISPOSE DAT#
Dispose STRSID#
Dispose P_STRSID#
else
@Messagebox("DIe Prozedur benötigt einen Dateinamen","Fehler bei Parametern",16)
endif
Endproc
Declare Datei$
LET DATEI$=@LoadFile$("Datei auswählen","*.*")
Get_Group_Name "Jeder"
Set_ACE_IN_DACL Datei$,@$(0),"-0","F_DELETE"
Get_Group_Name "Jeder"
Set_ACE_IN_DACL Datei$,@$(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"
Get_Group_Name "Administratoren"
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"
Set_ACE_IN_DACL Datei$,"Andreas","+","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"
@Editbox("API Rückgaben",1)
|
| | | | |
| | Rolf Koch | Hi AH, [quote:cba7059298] Fehlercode IsValidSid=1 Letzter API Fehler=0 Fehlercode LookupAccountSid=1 Letzter API Fehler=997 Jeder ****PROZEDUR gestartet**** Gewählte Datei=C:druck.txt Gruppenname/Username=Jeder Zu Addierende Rechte=F_DELETE Letzter API-Fehler=997 Rückgabe von GetVolumeInformation=1 Letzter API-Fehler=997 Laufwerksflags=1110000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschränkbar Rückgabe von GetFileSecurity=0 Letzter API-Fehler=122 Erforderliche Länge des Security Descriptor=188 Rückgabe von GetFileSecurity=1 Letzter API-Fehler=0 Rückgabe von IsValidSecurityDescriptor=1 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=0 DACL ist vorhanden! Rückgabe von GetAclInformation=1 Letzter API-Fehler=0 Anzahl benutzter Bytes in DACL=112 Anzahl freier Bytes in DACL=0 ACEs in DACL=4 Größe des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 String-SID des 1. ACEs=S-1-5-32-544 1. ACE Bezogen auf SID=Administratoren 1. ACE Bezogen auf Domainname=VORDEFINIERT Accessrechte des 1. ACEs=$1F01FF Recht im 1. ACE=FILE_ALL_ACCESS (Vollzugriff) Größe des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 String-SID des 2. ACEs=S-1-5-18 2. ACE Bezogen auf SID=SYSTEM 2. ACE Bezogen auf Domainname=NT-AUTORITÄT Accessrechte des 2. ACEs=$1F01FF Recht im 2. ACE=FILE_ALL_ACCESS (Vollzugriff) Größe des 3.ACEs=36 ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 String-SID des 3. ACEs=S-1-5-21-1708537768-1644491937-839522115-1003 3. ACE Bezogen auf SID=Rolf 3. ACE Bezogen auf Domainname=ROCKNROLF Accessrechte des 3. ACEs=$1F01FF Recht im 3. ACE=FILE_ALL_ACCESS (Vollzugriff) Größe des 4.ACEs=24 ACE Typ des 4.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 String-SID des 4. ACEs=S-1-5-32-545 4. ACE Bezogen auf SID=Benutzer 4. ACE Bezogen auf Domainname=VORDEFINIERT Accessrechte des 4. ACEs=$1200A9 Recht im 4. ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen) Recht im 4. ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen) Recht im 4. ACE=FILE_EXECUTE (Erlaubt eine Datei auszuführen) Recht im 4. ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute) Recht im 4. ACE=READ_CONTROL (Lesen der DACL Einträge und Besitzer) Recht im 4. ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten) Rückgabe von LookupAccountName für Jeder=0 Letzter API-Fehler=122 Länge des SIDs=12 Rückgabe von LookupAccountName für Jeder=1 Letzter API-Fehler=997 Länge des SIDs=12 Bytes für ACL=28 Rückgabe von InitializeAcl=1 Letzter API-Fehler=997 Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=997 DACL ist vorhanden! Rückgabe von GetAclInformation=1 Letzter API-Fehler=997 Anzahl benutzter Bytes in DACL=112 Anzahl freier Bytes in DACL=0 ACEs in DACL=4 Größe des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt 1. ACE Bezogen auf SID=Administratoren Accessrechte des 1. ACEs=$1F01FF Größe des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt 2. ACE Bezogen auf SID=SYSTEM Accessrechte des 2. ACEs=$1F01FF Größe des 3.ACEs=36 ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe von LookupAccountSid=0 Letzter API-Fehler=1332 Reset des API-Fehlers wird durchgeführt 3. ACE Bezogen auf SID= Accessrechte des 3. ACEs=$1F01FF Größe des 4.ACEs=24 ACE Typ des 4.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt 4. ACE Bezogen auf SID=Benutzer Accessrechte des 4. ACEs=$1200A9 Bei DENIED_ACE... ...zu addierende Rechte=$10000 Rückgabe von AddAce=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den selbsterzeugten DACL=1 Letzter API-Fehler=0 Rückgabe von InitializeSecurityDescriptor=1 Letzter API-Fehler=0 Rückgabe von SetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Rückgabe von SetFileSecurity=1 Letzter API-Fehler=0 Fehlercode IsValidSid=1 Letzter API Fehler=0 Fehlercode LookupAccountSid=1 Letzter API Fehler=997 Jeder ****PROZEDUR gestartet**** Gewählte Datei=C:druck.txt Gruppenname/Username=Jeder Zu Addierende Rechte=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 Letzter API-Fehler=997 Rückgabe von GetVolumeInformation=1 Letzter API-Fehler=997 Laufwerksflags=1110000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschränkbar Rückgabe von GetFileSecurity=0 Letzter API-Fehler=122 Erforderliche Länge des Security Descriptor=104 Rückgabe von GetFileSecurity=1 Letzter API-Fehler=0 Rückgabe von IsValidSecurityDescriptor=1 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=0 DACL ist vorhanden! Rückgabe von GetAclInformation=1 Letzter API-Fehler=0 Anzahl benutzter Bytes in DACL=28 Anzahl freier Bytes in DACL=0 ACEs in DACL=1 Größe des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 String-SID des 1. ACEs=S-1-1-0 1. ACE Bezogen auf SID=Jeder 1. ACE Bezogen auf Domainname= Accessrechte des 1. ACEs=$10000 Recht im 1. ACE=_DELETE (Datei löschen) Rückgabe von LookupAccountName für Jeder=0 Letzter API-Fehler=122 Länge des SIDs=12 Rückgabe von LookupAccountName für Jeder=1 Letzter API-Fehler=997 Länge des SIDs=12 Bytes für ACL=48 Rückgabe von InitializeAcl=1 Letzter API-Fehler=997 Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=997 DACL ist vorhanden! Rückgabe von GetAclInformation=1 Letzter API-Fehler=997 Anzahl benutzter Bytes in DACL=28 Anzahl freier Bytes in DACL=0 ACEs in DACL=1 Größe des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Vererbung=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt 1. ACE Bezogen auf SID=Jeder Accessrechte des 1. ACEs=$10000 Bei DENIED_ACE zu addierende Rechte=$0 Rückgabe von AddAce=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den selbsterzeugten DACL=1 Letzter API-Fehler=0 Bei ALLOWED_ACE... ...zu addierende Rechte=$1101BF Rückgabe von AddAce=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den selbsterzeugten DACL=1 Letzter API-Fehler=0 Rückgabe von InitializeSecurityDescriptor=1 Letzter API-Fehler=0 Rückgabe von SetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Rückgabe von SetFileSecurity=1 Letzter API-Fehler=0 Fehlercode IsValidSid=1 Letzter API Fehler=0 Fehlercode LookupAccountSid=1 Letzter API Fehler=997 Administratoren ****PROZEDUR gestartet**** Gewählte Datei=C:druck.txt Gruppenname/Username=Administratoren Zu Addierende Rechte=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 Letzter API-Fehler=997 Rückgabe von GetVolumeInformation=1 Letzter API-Fehler=997 Laufwerksflags=1110000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschränkbar Rückgabe von GetFileSecurity=0 Letzter API-Fehler=122 Erforderliche Länge des Security Descriptor=124 Rückgabe von GetFileSecurity=1 Letzter API-Fehler=0 Rückgabe von IsValidSecurityDescriptor=1 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=0 DACL ist vorhanden! Rückgabe von GetAclInformation=1 Letzter API-Fehler=0 Anzahl benutzter Bytes in DACL=48 Anzahl freier Bytes in DACL=0 ACEs in DACL=2 Größe des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 String-SID des 1. ACEs=S-1-1-0 1. ACE Bezogen auf SID=Jeder 1. ACE Bezogen auf Domainname= Accessrechte des 1. ACEs=$0 Größe des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 String-SID des 2. ACEs=S-1-1-0 2. ACE Bezogen auf SID=Jeder 2. ACE Bezogen auf Domainname= Accessrechte des 2. ACEs=$1101BF Recht im 2. ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen) Recht im 2. ACE=FILE_WRITE_DATA (Erlaubt Daten zu Scheiben) Recht im 2. ACE=FILE_APPEND_DATA (Erlaubt Daten anzuhängen) Recht im 2. ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen) Recht im 2. ACE=FILE_WRITE_EA (Erlaubt erweiterte Attribute zu schreiben) Recht im 2. ACE=FILE_EXECUTE (Erlaubt eine Datei auszuführen) Recht im 2. ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute) Recht im 2. ACE=FILE_WRITE_ATTRIBUTES (Ändern der Fileattribute) Recht im 2. ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten) Recht im 2. ACE=_DELETE (Datei löschen) Rückgabe von LookupAccountName für Administratoren=0 Letzter API-Fehler=122 Länge des SIDs=16 Rückgabe von LookupAccountName für Administratoren=1 Letzter API-Fehler=997 Länge des SIDs=16 Bytes für ACL=72 Rückgabe von InitializeAcl=1 Letzter API-Fehler=997 Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=997 DACL ist vorhanden! Rückgabe von GetAclInformation=1 Letzter API-Fehler=997 Anzahl benutzter Bytes in DACL=48 Anzahl freier Bytes in DACL=0 ACEs in DACL=2 Größe des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Vererbung=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt 1. ACE Bezogen auf SID=Jeder Accessrechte des 1. ACEs=$0 Rückgabe von AddAce=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den selbsterzeugten DACL=1 Letzter API-Fehler=0 Größe des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt 2. ACE Bezogen auf SID=Jeder Accessrechte des 2. ACEs=$1101BF Rückgabe von AddAce=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den selbsterzeugten DACL=1 Letzter API-Fehler=0 Bei ALLOWED_ACE... ...zu addierende Rechte=$11F01FF Rückgabe von AddAce=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den selbsterzeugten DACL=1 Letzter API-Fehler=0 Rückgabe von InitializeSecurityDescriptor=1 Letzter API-Fehler=0 Rückgabe von SetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Rückgabe von SetFileSecurity=1 Letzter API-Fehler=0 [/quote:cba7059298] Rolf |
| | | | |
| | | Hallo Rolf...
Sieht auf den ersten Blick ganz gut aus. Hauts hin oder gibts Probleme? Stimmt das mit den Werten im Explorer uberein? |
| | | | |
| | Rolf Koch | So wie ich es auf den ersten Blick sehe, ist alles OK. Werde aber bestimmt weitertesten. Gehe gleich aber zuerst mal auf ein IN EXTREMO Konzert hier in Koblenz *freu*
Rolf |
| | | | |
| | | Hab beim Spielen mit der PROC noch ein paar Fehler entdeckt. KompilierenMarkierenSeparierenDEF @SetFileSecurity(3) !"ADVAPI32","SetFileSecurityA"
DEF @InitializeSecurityDescriptor(2) !"ADVAPI32","InitializeSecurityDescriptor"
DEF @SetSecurityDescriptorDacl(4) !"ADVAPI32","SetSecurityDescriptorDacl"
DEF @AddAce(5) !"ADVAPI32","AddAce"
DEF @LookupAccountName(7) !"advapi32","LookupAccountNameA"
DEF @GetFileSecurity(5) !"ADVAPI32","GetFileSecurityA"
DEF @GetLastError(0) !"KERNEL32","GetLastError"
DEF @SetLastError(1) !"KERNEL32","SetLastError"
DEF @LookupPrivilegeName(4)!"advapi32","LookupPrivilegeNameA" Ermittelt aus dem Luid eines Privilegs dessen Namen.
DEF @LookupPrivilegeValue(3) !"advapi32","LookupPrivilegeValueA" Ermittelt aus dem Namen eines Privilegs dessen Luid.
DEF @OpenProcessToken(3) !"advapi32","OpenProcessToken" Öffnet Einstellprozess.
DEF @AdjustTokenPrivileges(6) !"advapi32","AdjustTokenPrivileges" Stellt Privilegien ein.
DEF @GetCurrentProcess(0) !"kernel32","GetCurrentProcess" Ermittel das Handle des aktiven Prozesses.
DEF @CloseHandle(1) !"kernel32","CloseHandle" Schließt ein Handle (Programm).
Def @GetVolumeInformation(8) !"KERNEL32","GetVolumeInformationA"
DEF @GetSecurityDescriptorOwner(3) !"ADVAPI32","GetSecurityDescriptorOwner"
DEF @GetSecurityDescriptorGroup(3) !"ADVAPI32","GetSecurityDescriptorGroup"
DEF @GetSecurityDescriptorDACL(4) !"ADVAPI32","GetSecurityDescriptorDacl"
DEF @GetSecurityDescriptorSACL(4) !"ADVAPI32","GetSecurityDescriptorSacl"
DEF @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
DEF @IsValidAcl(1) !"ADVAPI32","IsValidAcl"
DEF @GetAclInformation(4) !"ADVAPI32","GetAclInformation"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @GetAce(3) !"ADVAPI32","GetAce"
DEF @ConvertSidToStringSid(2) !"ADVAPI32","ConvertSidToStringSidA"
DEF @LocalFree(1) !"KERNEL32","LocalFree"
DEF @InitializeAcl(3) !"ADVAPI32","InitializeAcl"
Declare Fehler&
Proc GET_Group_Name
Parameters Name$
Declare SYS$,SEC_ID#,CBNAME_SIZE#,CBNAME#,ReferencedDomainName#,RDN_SIZE#
Declare SID_NAME_USE#,CBNAME$
SID wird erstellt.
IF @UPPER$(Name$)="JEDER"
DIM SEC_ID#,12
ElseIF @UPPER$(Name$)="ADMINISTRATOREN"
DIM SEC_ID#,16
else
DIM SEC_ID#,12
@Messagebox("Falscher Parameter!","Fehler",16)
endif
DIM CBNAME_SIZE#,4
DIM CBNAME#,256
DIM ReferencedDomainName#,256
DIM RDN_SIZE#,4
DIM SID_NAME_USE#,4
Clear SYS$,SID_NAME_USE#,CBNAME#,ReferencedDomainName#,SEC_ID#
IF @UPPER$(Name$)="JEDER"
LONG SEC_ID#,0=257
LONG SEC_ID#,4=16777216
LONG SEC_ID#,8=0
elseIF @UPPER$(Name$)="ADMINISTRATOREN"
LONG SEC_ID#,0=513
LONG SEC_ID#,4=83886080
LONG SEC_ID#,8=32
LONG SEC_ID#,12=544
endif
LONG CBNAME_SIZE#,0=255
LONG RDN_SIZE#,0=255
LET Fehler&=@IsValidSid(SEC_ID#)
ADDSTRING "Fehlercode IsValidSid="+@STR$(FEHLER&)
ADDSTRING "Letzter API Fehler="+@STR$(@GetLastError())
CASE FEHLER&=1 : LET FEHLER&=@LookupAccountSid(@ADDR(SYS$),SEC_ID#,CBNAME#,CBNAME_SIZE#,ReferencedDomainName#,RDN_SIZE#,SID_NAME_USE#)
ADDSTRING "Fehlercode LookupAccountSid="+@STR$(FEHLER&)
ADDSTRING "Letzter API Fehler="+@STR$(@GetLastError())
ADDSTRING @STRING$(CBNAME#,0)
LET CBNAME$=@STRING$(CBNAME#,0)
Dispose SID_NAME_USE#
Dispose RDN_SIZE#
Dispose ReferencedDomainName#
Dispose CBNAME#
DISPOSE SEC_ID#
DISPOSE CBNAME_SIZE#
Return CBNAME$
endproc
Proc Set_ACE_IN_DACL
Parameters FileName$,User$,Hinzu_entfernen$,FSFlags$
1.Parameter= Dateiname
2.Parameter= Username
3.Parameter= +;-;0 (+=Rechte entfernen, -=hinzufügen, 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)
ADDSTRING "****PROZEDUR gestartet****"
IF @AND(Filename$<>"",@AND(USER$<>"",@OR(@INSTR("+",Hinzu_entfernen$)>0,@INSTR("-",Hinzu_entfernen$)>0)))
Declare NEW_ACL1#,SIDA#
Declare PSECURITY_DESCRIPTOR#,Needed#,Needed&
Declare Laufwerk$,Label#,LFLAGS#,DAT#
DEclare SID#,GFLAG#,System$,FSFlags&
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare Test&,ANZAHL_BYTES&
Declare ACL_PRESENT#,P_ACL#,ACL_D#
Declare ACL_INFO#,Zähler&,ACE#,P_ACE#,ACE_SIZE&,STRSID#,P_STRSID#
Declare SID2#,IO%,SecFlag&,ACCESS_MASK&
Declare Vorhanden&,Needed#,SecFlag&,NEEDED&
Declare PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare ACE_ZÄHLER&,SIZE_ACCOUNT&
Clear Needed&
Clear Laufwerk$
Clear System$,FSFlags&
Clear Test&,ANZAHL_BYTES&
Clear Zähler&,ACE_SIZE&
Clear SecFlag&,ACCESS_MASK&
Clear Vorhanden&,SecFlag&,NEEDED&
Clear ACE_ZÄHLER&,SIZE_ACCOUNT&
LET FSFlags&=0
LET LAUFWERK$=@LEFT$(Filename$,3)
DIM Label#,256
DIM LFLAGS#,4
DIM DAT#,256
DIM STRSID#,256
DIM P_STRSID#,4
DIM Needed#,4
ADDSTRING "Gewählte Datei="+Filename$
ADDSTRING "Gruppenname/Username="+USER$
ADDSTRING "Zu Addierende Rechte=..."
ADDSTRING FSFLAGS$
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET FEHLER&=@GetVolumeInformation(@ADDR(Laufwerk$),Label#,256,0,0,LFlags#,DAT#,256)
ADDSTRING "Rückgabe von GetVolumeInformation="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Laufwerksflags="+@BIN$(@LONG(LFLAGS#,0))
ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
IF @LONG(LFLAGS#,0) | $8 = @LONG(LFLAGS#,0)
DIM SIDa#,1
ADDSTRING "Zugriff ist einschränkbar"
LET SECFLAG&=$1 | $2 | $4
Clear Needed#
LET Fehler&=@GetFileSecurity(@ADDR(Filename$),SecFlag&,0,0,Needed#)
ADDSTRING "Rückgabe von GetFileSecurity="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET NEEDED&=@LONG(Needed#,0)
ADDSTRING "Erforderliche Länge des Security Descriptor="+@STR$(Needed&)
CASE NEEDED&=0 : LET NEEDED&=1024
DIM PSECURITY_DESCRIPTOR#,Needed&
Clear PSECURITY_DESCRIPTOR#
@SetLastError(0)
LET Fehler&=@GetFileSecurity(@ADDR(Filename$),SECFLAG&,PSECURITY_DESCRIPTOR#,NEEDED&,Needed#)
ADDSTRING "Rückgabe von GetFileSecurity="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@IsValidSecurityDescriptor(PSECURITY_DESCRIPTOR#)
ADDSTRING "Rückgabe von IsValidSecurityDescriptor="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
DIM ACL_PRESENT#,1
DIM P_ACL#,4
DIM ACL_D#,4
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let Fehler&=@GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
ADDSTRING "Rückgabe von GetSecurityDescriptorDacl="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@IsValidAcl(@long(P_ACL#,0))
ADDSTRING "Rückgabe von IsValidAcl für den DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
IF @LONG(ACL_PRESENT#,0)=1
ADDSTRING "DACL ist vorhanden!"
else
ADDSTRING "DACL ist nicht vorhanden!"
endif
LET ANZAHL_BYTES&=8 Für ACL HEADER 8 Bytes veranschlagt
IF @AND(Fehler&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let Fehler&=@GetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
ADDSTRING "Rückgabe von GetAclInformation="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Anzahl benutzter Bytes in DACL="+@STR$(@LONG(ACL_INFO#,4))
ADDSTRING "Anzahl freier Bytes in DACL="+@STR$(@LONG(ACL_INFO#,8))
ADDSTRING "ACEs in DACL="+@STR$(@LONG(ACL_INFO#,0))
LET Zähler&=0
DIM ACCOUNT_NAME#,256
DIM SIZE_ACCOUNT#,4
DIM Domain#,256
DIM SIZE_DOMAIN#,4
DIM SID_NAME_USE#,4
IF @STR$(@LONG(ACL_INFO#,0))<>0
While Zähler&<@LONG(ACL_INFO#,0)
Clear P_ACE#
Let Fehler&=@GetAce(@long(P_ACL#,0),Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@CopyMemory(ACE#,@LONG(P_ACE#,0),4)
LET ACE_SIZE&=@Word(ACE#,2) Die Größen aller ACEs werden addiert.
ADDSTRING "Größe des "+@STR$(@INT(Zähler&+1))+".ACEs="+@STR$(@Word(ACE#,2))
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Clear ACE#
Long SIZE_ACCOUNT#,0=255
LONG SIZE_DOMAIN#,0=255
@CopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
IF @BYTE(ACE#,0)=0
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=ACCESS_ALLOWED_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=1
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=ACCESS_DENIED_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=2
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=SYSTEM_AUDIT_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=3
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=SYSTEM_ALARM_ACE"
endif
DIM SID2#,ACE_SIZE&-8
@CopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET Fehler&=@IsValidSid(SID2#)
ADDSTRING "Fehlercode IsValidSid="+@STR$(FEHLER&)
ADDSTRING "Letzter API Fehler="+@STR$(@GetLastError())
LET FEHLER&=@LookupAccountSid(@ADDR(SYSTEM$),SID2#,ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Rückgabe von LookupAccountSid="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Reset des API-Fehlers wird durchgeführt"
@SetLastError(0)
LET IO%=%IORESULT
Clear STRSID#
IF @VAL(@LEFT$($WINVER,3))>=5.0
LET FEHLER&=@ConvertSidToStringSid(SID2#,P_STRSID#)
@CopyMemory(STRSID#,@LONG(P_STRSID#,0),255)
ADDSTRING "Rückgabe von ConvertSidToStringSid="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@LocalFree(@LONG(P_STRSID#,0))
ADDSTRING "Rückgabe von LocalFree für den String-SID="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "String-SID des "+@STR$(@int(Zähler&+1))+". ACEs="+@STRING$(STRSID#,0)
endif
ADDSTRING @STR$(@int(Zähler&+1))+". ACE Bezogen auf SID="+@String$(ACCOUNT_NAME#,0)
IF @UPPER$(@String$(ACCOUNT_NAME#,0))=@UPPER$(USER$)
IF @AND(@BYTE(ACE#,0)=0,@INSTR("+",Hinzu_entfernen$)>0)
LET VORHANDEN&=@or(VORHANDEN&,1)
endif
IF @AND(@BYTE(ACE#,0)=1,@INSTR("-",Hinzu_entfernen$)>0)
LET VORHANDEN&=@or(VORHANDEN&,2)
endif
endif
ADDSTRING @STR$(@int(Zähler&+1))+". ACE Bezogen auf Domainname="+@String$(Domain#,0)
ADDSTRING "Accessrechte des "+@STR$(@int(Zähler&+1))+". ACEs=$"+@HEX$(@LONG(ACE#,4))
LET ACCESS_MASK&=@LONG(ACE#,4)
IF @or(ACCESS_MASK&,$1F01FF)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_ALL_ACCESS (Vollzugriff)"
LET ACCESS_MASK&=ACCESS_MASK&-$1F01FF
endif
IF @or(ACCESS_MASK&,$1)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen)"
LET ACCESS_MASK&=ACCESS_MASK&-$1
endif
IF @or(ACCESS_MASK&,$2)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_WRITE_DATA (Erlaubt Daten zu Scheiben)"
LET ACCESS_MASK&=ACCESS_MASK&-$2
endif
IF @or(ACCESS_MASK&,$4)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_APPEND_DATA (Erlaubt Daten anzuhängen)"
LET ACCESS_MASK&=ACCESS_MASK&-$4
endif
IF @or(ACCESS_MASK&,$8)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen)"
LET ACCESS_MASK&=ACCESS_MASK&-$8
endif
IF @or(ACCESS_MASK&,$10)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_WRITE_EA (Erlaubt erweiterte Attribute zu schreiben)"
LET ACCESS_MASK&=ACCESS_MASK&-$10
endif
IF @or(ACCESS_MASK&,$20)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_EXECUTE (Erlaubt eine Datei auszuführen)"
LET ACCESS_MASK&=ACCESS_MASK&-$20
endif
IF @or(ACCESS_MASK&,$80)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute)"
LET ACCESS_MASK&=ACCESS_MASK&-$80
endif
IF @or(ACCESS_MASK&,$100)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_WRITE_ATTRIBUTES (Ändern der Fileattribute)"
LET ACCESS_MASK&=ACCESS_MASK&-$100
endif
IF @or(ACCESS_MASK&,$00040000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=WRITE_DAC (Ändern der DACL Einträge)"
LET ACCESS_MASK&=ACCESS_MASK&-$00040000
endif
IF @or(ACCESS_MASK&,$00020000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=READ_CONTROL (Lesen der DACL Einträge und Besitzer)"
LET ACCESS_MASK&=ACCESS_MASK&-$00020000
endif
IF @or(ACCESS_MASK&,$00100000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten)"
LET ACCESS_MASK&=ACCESS_MASK&-$00100000
endif
IF @or(ACCESS_MASK&,$40)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=File_Delete_Child (Erlaubt einen Unterordner zu löschen - für Dateien keine Bedeutung)"
LET ACCESS_MASK&=ACCESS_MASK&-$40
endif
IF @or(ACCESS_MASK&,$01000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=ACCESS_SYSTEM_SECURITY (Erlaubt den Zugriff auf den SACL)"
LET ACCESS_MASK&=ACCESS_MASK&-$01000000
endif
IF @or(ACCESS_MASK&,$10000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=GENERIC_ALL"
LET ACCESS_MASK&=ACCESS_MASK&-$10000000
endif
IF @or(ACCESS_MASK&,$20000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=GENERIC_EXECUTE"
LET ACCESS_MASK&=ACCESS_MASK&-$20000000
endif
IF @or(ACCESS_MASK&,$40000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=GENERIC_WRITE"
LET ACCESS_MASK&=ACCESS_MASK&-$40000000
endif
IF @or(ACCESS_MASK&,$80000000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=GENERIC_READ"
LET ACCESS_MASK&=ACCESS_MASK&-$80000000
endif
IF @or(ACCESS_MASK&,$80000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=WRITE_OWNER (Eigentümer ändern)"
LET ACCESS_MASK&=ACCESS_MASK&-$80000
endif
IF @or(ACCESS_MASK&,$00010000)=ACCESS_MASK&
ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=_DELETE (Datei löschen)"
LET ACCESS_MASK&=ACCESS_MASK&-$00010000
endif
IF ACCESS_MASK&>0
ADDSTRING "Nicht berechnete Rechte="+@STR$(ACCESS_MASK&)+" ($"+@HEX$(ACCESS_MASK&)+")"
endif
LET Zähler&=Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
Clear SID_NAME_USE#,ACCOUNT_NAME#,Domain#,SIDa#,System$
Long SIZE_ACCOUNT#,0=1
LONG SIZE_DOMAIN#,0=255
LET Fehler&=@LookupAccountName(@ADDR(SYSTEM$),@addr(USER$),SIDa#,SIZE_ACCOUNT#,DOMAIN#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Rückgabe von LookupAccountName für "+User$+"="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Länge des SIDs="+@STR$(@LONG(SIZE_ACCOUNT#,0))
LET SIZE_ACCOUNT&=@LONG(SIZE_ACCOUNT#,0)
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Long SIZE_ACCOUNT#,0=SIZE_ACCOUNT&
LONG SIZE_DOMAIN#,0=255
Dispose SIDa#
DIM SIDa#,SIZE_ACCOUNT&
Clear SIDa#
LET Fehler&=@LookupAccountName(@ADDR(SYSTEM$),@addr(USER$),SIDa#,SIZE_ACCOUNT#,DOMAIN#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Rückgabe von LookupAccountName für "+User$+"="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Länge des SIDs="+@STR$(@LONG(SIZE_ACCOUNT#,0))
IF VORHANDEN&=0
LET Anzahl_Bytes&=Anzahl_Bytes&+@LONG(SIZE_ACCOUNT#,0)+8 Alle ACEs+SID+ACCESS_MASK+ACE_HEADER
endif
IF @INSTR("0",Hinzu_entfernen$)>0
LET Anzahl_Bytes&=@LONG(SIZE_ACCOUNT#,0)+8+8 SID+ACCESS_MASK+ACE_HEADER+ACL_HEADER
endif
Dispose ACCOUNT_NAME#
Dispose SIZE_ACCOUNT#
Dispose Domain#
Dispose SIZE_DOMAIN#
Dispose SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
Endif
ADDSTRING "Bytes für ACL="+@STR$(Anzahl_Bytes&)
DIM NEW_ACL1#,Anzahl_Bytes&
LET FEHLER&=@InitializeAcl(NEW_ACL1#,Anzahl_Bytes&,$2)
ADDSTRING "Rückgabe von InitializeAcl="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let Fehler&=@GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
ADDSTRING "Rückgabe von GetSecurityDescriptorDacl="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@IsValidAcl(@long(P_ACL#,0))
ADDSTRING "Rückgabe von IsValidAcl für den DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
IF @LONG(ACL_PRESENT#,0)=1
ADDSTRING "DACL ist vorhanden!"
else
ADDSTRING "DACL ist nicht vorhanden!"
endif
IF @INSTR("-",Hinzu_entfernen$)>0
LET ACE_ZÄHLER&=1
else
LET ACE_ZÄHLER&=0
endif
IF @AND(Fehler&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let Fehler&=@GetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
ADDSTRING "Rückgabe von GetAclInformation="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Anzahl benutzter Bytes in DACL="+@STR$(@LONG(ACL_INFO#,4))
ADDSTRING "Anzahl freier Bytes in DACL="+@STR$(@LONG(ACL_INFO#,8))
ADDSTRING "ACEs in DACL="+@STR$(@LONG(ACL_INFO#,0))
LET Zähler&=0
DIM ACCOUNT_NAME#,256
DIM SIZE_ACCOUNT#,4
DIM Domain#,256
DIM SIZE_DOMAIN#,4
DIM SID_NAME_USE#,4
IF @STR$(@LONG(ACL_INFO#,0))<>0
While Zähler&<@LONG(ACL_INFO#,0)
Clear P_ACE#
Let Fehler&=@GetAce(@long(P_ACL#,0),Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@CopyMemory(ACE#,@LONG(P_ACE#,0),4)
ADDSTRING "Größe des "+@STR$(@INT(Zähler&+1))+".ACEs="+@STR$(@Word(ACE#,2))
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Clear ACE#
Long SIZE_ACCOUNT#,0=255
LONG SIZE_DOMAIN#,0=255
@CopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
IF @BYTE(ACE#,0)=0
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=ACCESS_ALLOWED_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=1
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=ACCESS_DENIED_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=2
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=SYSTEM_AUDIT_ACE_TYPE"
ElseIF @BYTE(ACE#,0)=3
ADDSTRING "ACE Typ des "+@STR$(@INT(Zähler&+1))+".ACEs=SYSTEM_ALARM_ACE"
endif
ADDSTRING "Vererbung="+@STR$(@BYTE(ACE#,1))
DIM SID2#,ACE_SIZE&-8
@CopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET Fehler&=@IsValidSid(SID2#)
ADDSTRING "Fehlercode IsValidSid="+@STR$(FEHLER&)
ADDSTRING "Letzter API Fehler="+@STR$(@GetLastError())
LET FEHLER&=@LookupAccountSid(@ADDR(System$),SID2#,ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Rückgabe von LookupAccountSid="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Reset des API-Fehlers wird durchgeführt"
@SetLastError(0)
LET IO%=%IORESULT
Clear STRSID#
ADDSTRING @STR$(@int(Zähler&+1))+". ACE Bezogen auf SID="+@String$(ACCOUNT_NAME#,0)
ADDSTRING "Accessrechte des "+@STR$(@int(Zähler&+1))+". ACEs=$"+@HEX$(@LONG(ACE#,4))
LET ACCESS_MASK&=@LONG(ACE#,4)
IF @UPPER$(@String$(ACCOUNT_NAME#,0))=@UPPER$(USER$)
IF @BYTE(ACE#,0)=0
IF @INSTR("+",Hinzu_entfernen$)>0
CASE @INSTR("0",Hinzu_entfernen$)=0 : LET FSFlags&=ACCESS_MASK&
ElseIF @INSTR("-",Hinzu_entfernen$)>0
if @INSTR("0",Hinzu_entfernen$)=0
IF @AND(@or(ACCESS_MASK&,$1)=ACCESS_MASK&,@INSTR("FILE_READ_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$1
endif
IF @AND(@or(ACCESS_MASK&,$2)=ACCESS_MASK&,@INSTR("FILE_WRITE_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$2
endif
IF @AND(@or(ACCESS_MASK&,$4)=ACCESS_MASK&,@INSTR("FILE_APPEND_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$4
endif
IF @AND(@or(ACCESS_MASK&,$8)=ACCESS_MASK&,@INSTR("FILE_READ_EA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$8
endif
IF @AND(@or(ACCESS_MASK&,$10)=ACCESS_MASK&,@INSTR("FILE_WRITE_EA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$10
endif
IF @AND(@or(ACCESS_MASK&,$20)=ACCESS_MASK&,@INSTR("FILE_EXECUTE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$20
endif
IF @AND(@or(ACCESS_MASK&,$80)=ACCESS_MASK&,@INSTR("FILE_READ_ATTRIBUTES",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$80
endif
IF @AND(@or(ACCESS_MASK&,$100)=ACCESS_MASK&,@INSTR("FILE_WRITE_ATTRIBUTES",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$100
endif
IF @AND(@or(ACCESS_MASK&,$00040000)=ACCESS_MASK&,@INSTR("WRITE_DAC",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00040000
endif
IF @AND(@or(ACCESS_MASK&,$00020000)=ACCESS_MASK&,@INSTR("READ_CONTROL",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00020000
endif
IF @AND(@or(ACCESS_MASK&,$00100000)=ACCESS_MASK&,@INSTR("SYNCHRONIZE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00100000
endif
IF @AND(@or(ACCESS_MASK&,$40)=ACCESS_MASK&,@INSTR("FILE_DELETE_CHILD",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$40
endif
IF @AND(@or(ACCESS_MASK&,$01000000)=ACCESS_MASK&,@INSTR("ACCESS_SYSTEM_SECURITY",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$01000000
endif
IF @AND(@or(ACCESS_MASK&,$80000)=ACCESS_MASK&,@INSTR("WRITE_OWNER",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$80000
endif
IF @AND(@or(ACCESS_MASK&,$00010000)=ACCESS_MASK&,@INSTR("F_DELETE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00010000
endif
ADDSTRING "Bei ALLOWED_ACE zu addierende Rechte=$"+@HEX$(ACCESS_MASK&)
LONG ACE#,4=ACCESS_MASK&
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
ADDSTRING "Rückgabe von AddAce an Punkt "+@STR$(ACE_ZÄHLER&)+"="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
ENDIF
endif
Elseif @BYTE(ACE#,0)=1
IF @INSTR("+",Hinzu_entfernen$)>0
IF @INSTR("0",Hinzu_entfernen$)=0
IF @AND(@or(ACCESS_MASK&,$1)=ACCESS_MASK&,@INSTR("FILE_READ_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$1
endif
IF @AND(@or(ACCESS_MASK&,$2)=ACCESS_MASK&,@INSTR("FILE_WRITE_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$2
endif
IF @AND(@or(ACCESS_MASK&,$4)=ACCESS_MASK&,@INSTR("FILE_APPEND_DATA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$4
endif
IF @AND(@or(ACCESS_MASK&,$8)=ACCESS_MASK&,@INSTR("FILE_READ_EA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$8
endif
IF @AND(@or(ACCESS_MASK&,$10)=ACCESS_MASK&,@INSTR("FILE_WRITE_EA",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$10
endif
IF @AND(@or(ACCESS_MASK&,$20)=ACCESS_MASK&,@INSTR("FILE_EXECUTE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$20
endif
IF @AND(@or(ACCESS_MASK&,$80)=ACCESS_MASK&,@INSTR("FILE_READ_ATTRIBUTES",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$80
endif
IF @AND(@or(ACCESS_MASK&,$100)=ACCESS_MASK&,@INSTR("FILE_WRITE_ATTRIBUTES",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$100
endif
IF @AND(@or(ACCESS_MASK&,$00040000)=ACCESS_MASK&,@INSTR("WRITE_DAC",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00040000
endif
IF @AND(@or(ACCESS_MASK&,$00020000)=ACCESS_MASK&,@INSTR("READ_CONTROL",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00020000
endif
IF @AND(@or(ACCESS_MASK&,$00100000)=ACCESS_MASK&,@INSTR("SYNCHRONIZE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00100000
endif
IF @AND(@or(ACCESS_MASK&,$40)=ACCESS_MASK&,@INSTR("FILE_DELETE_CHILD",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$40
endif
IF @AND(@or(ACCESS_MASK&,$01000000)=ACCESS_MASK&,@INSTR("ACCESS_SYSTEM_SECURITY",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$01000000
endif
IF @AND(@or(ACCESS_MASK&,$80000)=ACCESS_MASK&,@INSTR("WRITE_OWNER",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$80000
endif
IF @AND(@or(ACCESS_MASK&,$00010000)=ACCESS_MASK&,@INSTR("F_DELETE",@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-$00010000
endif
ADDSTRING "Bei DENIED_ACE zu addierende Rechte=$"+@HEX$(ACCESS_MASK&)
LONG ACE#,4=ACCESS_MASK&
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
ADDSTRING "Rückgabe von AddAce an Punkt "+@STR$(ACE_ZÄHLER&)+"="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
ElseIF @INSTR("-",Hinzu_entfernen$)>0
IF @INSTR("0",Hinzu_entfernen$)=0
LONG ACE#,4=ACCESS_MASK&
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
ADDSTRING "Bei DENIED_ACE zu addierende Rechte=$"+@HEX$(ACCESS_MASK&)
ADDSTRING "Rückgabe von AddAce an Punkt "+@STR$(ACE_ZÄHLER&)+"="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
endif
else
IF @INSTR("0",Hinzu_entfernen$)=0
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
ADDSTRING "Rückgabe von AddAce an Punkt "+@STR$(ACE_ZÄHLER&)+"="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
LET Zähler&=Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
DIM ACE#,SIZE_ACCOUNT&+8
IF @INSTR("+",Hinzu_entfernen$)>0
Byte ACE#,0=0
ADDSTRING "Bei ALLOWED_ACE..."
ELSEIF @INSTR("-",Hinzu_entfernen$)>0
Byte ACE#,0=1
ADDSTRING "Bei DENIED_ACE..."
endif
IF @INSTR("FILE_READ_DATA",@UPPER$(FSFlags$))>0
LET FSFlags&=@OR(FSFLAGS&,$1)
endif
IF @INSTR("FILE_WRITE_DATA",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$2)
endif
IF @INSTR("FILE_APPEND_DATA",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$4)
endif
IF @INSTR("FILE_READ_EA",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$8)
endif
IF @INSTR("FILE_WRITE_EA",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$10)
endif
IF @INSTR("FILE_EXECUTE",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$20)
endif
IF @INSTR("FILE_DELETE_CHILD",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$40)
endif
IF @INSTR("FILE_READ_ATTRIBUTES",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$80)
endif
IF @INSTR("FILE_WRITE_ATTRIBUTES",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$100)
endif
IF @INSTR("F_DELETE",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$10000)
endif
IF @INSTR("READ_CONTROL",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$20000)
endif
IF @INSTR("WRITE_DAC",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$40000)
endif
IF @INSTR("SYNCHRONIZE",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$100000)
endif
IF @INSTR("ACCESS_SYSTEM_SECURITY",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$1000000)
endif
IF @INSTR("WRITE_OWNER",@UPPER$(FSFLAGS$))>0
LET FSFlags&=@OR(FSFLAGS&,$80000)
endif
Byte ACE#,1=0
WORD ACE#,2=SIZE_ACCOUNT&+8
LONG ACE#,4=FSFlags&
LET ZÄHLER&=0
ADDSTRING "...zu addierende Rechte=$"+@HEX$(FSFlags&)
WHILE ZÄHLER&<>SIZE_ACCOUNT&
BYTE ACE#,8+Zähler&=@BYTE(SIDa#,Zähler&)
LET ZÄHLER&=ZÄHLER&+1
WEND
IF @INSTR("-",Hinzu_entfernen$)>0
LET ACE_ZÄHLER&=0
endif
LET FEHLER&=@AddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,SIZE_ACCOUNT&+8)
ADDSTRING "Rückgabe von AddAce an Punkt "+@STR$(ACE_ZÄHLER&)+"="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET Fehler&=@IsValidAcl(NEW_ACL1#)
ADDSTRING "Rückgabe von IsValidAcl für den selbsterzeugten DACL="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET TEST&=NEW_ACL1#
LET FEHLER&=@InitializeSecurityDescriptor(PSECURITY_DESCRIPTOR#,$1)
ADDSTRING "Rückgabe von InitializeSecurityDescriptor="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET FEHLER&=@SetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,1,NEW_ACL1#,0)
ADDSTRING "Rückgabe von SetSecurityDescriptorDacl="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
LET FEHLER&=@SetFileSecurity(@ADDR(FileName$),$4,PSECURITY_DESCRIPTOR#)
ADDSTRING "Rückgabe von SetFileSecurity="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
DISPOSE ACE#
Dispose ACCOUNT_NAME#
Dispose SIZE_ACCOUNT#
Dispose Domain#
Dispose SIZE_DOMAIN#
Dispose SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
endif
Dispose PSECURITY_DESCRIPTOR#
Dispose Needed#
Dispose NEW_ACL1#
Dispose ACL_PRESENT#
Dispose P_ACL#
Dispose ACL_D#
Dispose SIDa#
else
ADDSTRING "Zugriff ist nicht einschränkbar"
@Messagebox("Der Zugriff auf die angegebene Datei ist nicht einschränkbar!","Zugriff nicht einschränkbar!",16)
endif
Dispose Label#
Dispose LFlags#
DISPOSE DAT#
Dispose STRSID#
Dispose P_STRSID#
else
CASE FILENAME$="" : @Messagebox("DIe Prozedur benötigt einen Dateinamen!","Fehler beim 1.Parametern",16)
CASE USER$="" : @Messagebox("DIe Prozedur benötigt einen User- oder Gruppennamen!","Fehler beim 2.Parametern",16)
CASE @AND(@INSTR("+",Hinzu_entfernen$)=0,@INSTR("-",Hinzu_entfernen$)=0) : @Messagebox("DIe Prozedur benötigt ein + oder ein - als dritten Parameter!","Fehler beim 3.Parametern",16)
endif
Endproc
Declare Datei$
LET DATEI$=@LoadFile$("Datei auswählen","*.*")
Set_ACE_IN_DACL Datei$,"Andreas","+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"
Get_Group_Name "Jeder"
Set_ACE_IN_DACL Datei$,@$(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"
Get_Group_Name "Jeder"
Set_ACE_IN_DACL Datei$,@$(0),"-","F_DELETE"
Get_Group_Name "Administratoren"
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"
@Editbox("API Rückgaben",1)
|
| | | | |
| | | So?[quote:3d16bd5b50]Fehlercode IsValidSid=1 Letzter API Fehler=0 Fehlercode LookupAccountSid=1 Letzter API Fehler=997 Jeder ****PROZEDUR gestartet**** Gewaehlte Datei=Cokumente und EinstellungenPackard BellDesktopwischenablage01.bmp Gruppenname/Username=Jeder Zu Addierende Rechte=... 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 Letzter API-Fehler=997 Raeckgabe von GetVolumeInformation=1 Letzter API-Fehler=997 Laufwerksflags=1010000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschraenkbar Raeckgabe von GetFileSecurity=0 Letzter API-Fehler=122 Erforderliche Laenge des Security Descriptor=164 Raeckgabe von GetFileSecurity=1 Letzter API-Fehler=0 Raeckgabe von IsValidSecurityDescriptor=1 Letzter API-Fehler=0 Raeckgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den DACL=1 Letzter API-Fehler=0 DACL ist vorhanden! Raeckgabe von GetAclInformation=1 Letzter API-Fehler=0 Anzahl benutzter Bytes in DACL=88 Anzahl freier Bytes in DACL=0 ACEs in DACL=3 Graeße des 1.ACEs=36 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Fehlercode IsValidSid=1 Letzter API Fehler=0 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Raeckgabe von LocalFree faer den String-SID=0 Letzter API-Fehler=0 String-SID des 1. ACEs=S-1-5-21-789336058-1343024091-854245398-1004 1. ACE Bezogen auf SID=Packard Bell 1. ACE Bezogen auf Domainname=C4 Accessrechte des 1. ACEs=$1F01FF Recht im 1. ACE=FILE_ALL_ACCESS (Vollzugriff) Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Fehlercode IsValidSid=1 Letzter API Fehler=0 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Raeckgabe von LocalFree faer den String-SID=0 Letzter API-Fehler=0 String-SID des 2. ACEs=S-1-5-18 2. ACE Bezogen auf SID=SYSTEM 2. ACE Bezogen auf Domainname=NT-AUTORITÄT Accessrechte des 2. ACEs=$1F01FF Recht im 2. ACE=FILE_ALL_ACCESS (Vollzugriff) Graeße des 3.ACEs=24 ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE Fehlercode IsValidSid=1 Letzter API Fehler=0 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Raeckgabe von LocalFree faer den String-SID=0 Letzter API-Fehler=0 String-SID des 3. ACEs=S-1-5-32-544 3. ACE Bezogen auf SID=Administratoren 3. ACE Bezogen auf Domainname=VORDEFINIERT Accessrechte des 3. ACEs=$1F01FF Recht im 3. ACE=FILE_ALL_ACCESS (Vollzugriff) Raeckgabe von LookupAccountName faer Jeder=0 Letzter API-Fehler=122 Laenge des SIDs=12 Raeckgabe von LookupAccountName faer Jeder=1 Letzter API-Fehler=997 Laenge des SIDs=12 Bytes faer ACL=108 Raeckgabe von InitializeAcl=1 Letzter API-Fehler=997 Raeckgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Raeckgabe von IsValidAcl faer den DACL=1 Letzter API-Fehler=997 DACL ist vorhanden! Raeckgabe von GetAclInformation=1 Letzter API-Fehler=997 Anzahl benutzter Bytes in DACL=88 Anzahl freier Bytes in DACL=0 ACEs in DACL=3 Graeße des 1.ACEs=36 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=16 Fehlercode IsValidSid=1 Letzter API Fehler=997 Raeckgabe von LookupAccountSid=0 Letzter API-Fehler=1332 Reset des API-Fehlers wird durchgefaehrt 1. ACE Bezogen auf SID= Accessrechte des 1. ACEs=$1F01FF Raeckgabe von AddAce an Punkt 0=0 Letzter API-Fehler=87 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=0 Letzter API-Fehler=87 Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=16 Fehlercode IsValidSid=1 Letzter API Fehler=87 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 2. ACE Bezogen auf SID=SYSTEM Accessrechte des 2. ACEs=$1F01FF Raeckgabe von AddAce an Punkt 1=0 Letzter API-Fehler=87 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=0 Letzter API-Fehler=87 Graeße des 3.ACEs=24 ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=16 Fehlercode IsValidSid=1 Letzter API Fehler=87 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 3. ACE Bezogen auf SID=Administratoren Accessrechte des 3. ACEs=$1F01FF Raeckgabe von AddAce an Punkt 2=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1 Letzter API-Fehler=0 Bei ALLOWED_ACE... ...zu addierende Rechte=$1101BF Raeckgabe von AddAce an Punkt 3=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1 Letzter API-Fehler=0 Raeckgabe von InitializeSecurityDescriptor=1 Letzter API-Fehler=0 Raeckgabe von SetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Raeckgabe von SetFileSecurity=1 Letzter API-Fehler=0 Fehlercode IsValidSid=1 Letzter API Fehler=0 Fehlercode LookupAccountSid=1 Letzter API Fehler=997 Jeder ****PROZEDUR gestartet**** Gewaehlte Datei=Cokumente und EinstellungenPackard BellDesktopwischenablage01.bmp Gruppenname/Username=Jeder Zu Addierende Rechte=... F_DELETE Letzter API-Fehler=997 Raeckgabe von GetVolumeInformation=1 Letzter API-Fehler=997 Laufwerksflags=1010000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschraenkbar Raeckgabe von GetFileSecurity=0 Letzter API-Fehler=122 Erforderliche Laenge des Security Descriptor=184 Raeckgabe von GetFileSecurity=1 Letzter API-Fehler=0 Raeckgabe von IsValidSecurityDescriptor=1 Letzter API-Fehler=0 Raeckgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den DACL=1 Letzter API-Fehler=0 DACL ist vorhanden! Raeckgabe von GetAclInformation=1 Letzter API-Fehler=0 Anzahl benutzter Bytes in DACL=52 Anzahl freier Bytes in DACL=56 ACEs in DACL=2 Graeße des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Fehlercode IsValidSid=1 Letzter API Fehler=0 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Raeckgabe von LocalFree faer den String-SID=0 Letzter API-Fehler=0 String-SID des 1. ACEs=S-1-5-32-544 1. ACE Bezogen auf SID=Administratoren 1. ACE Bezogen auf Domainname=VORDEFINIERT Accessrechte des 1. ACEs=$1F01FF Recht im 1. ACE=FILE_ALL_ACCESS (Vollzugriff) Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Fehlercode IsValidSid=1 Letzter API Fehler=0 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Raeckgabe von LocalFree faer den String-SID=0 Letzter API-Fehler=0 String-SID des 2. ACEs=S-1-1-0 2. ACE Bezogen auf SID=Jeder 2. ACE Bezogen auf Domainname= Accessrechte des 2. ACEs=$1101BF Recht im 2. ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen) Recht im 2. ACE=FILE_WRITE_DATA (Erlaubt Daten zu Scheiben) Recht im 2. ACE=FILE_APPEND_DATA (Erlaubt Daten anzuhaengen) Recht im 2. ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen) Recht im 2. ACE=FILE_WRITE_EA (Erlaubt erweiterte Attribute zu schreiben) Recht im 2. ACE=FILE_EXECUTE (Erlaubt eine Datei auszufaehren) Recht im 2. ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute) Recht im 2. ACE=FILE_WRITE_ATTRIBUTES (aendern der Fileattribute) Recht im 2. ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten) Recht im 2. ACE=_DELETE (Datei laeschen) Raeckgabe von LookupAccountName faer Jeder=0 Letzter API-Fehler=122 Laenge des SIDs=12 Raeckgabe von LookupAccountName faer Jeder=1 Letzter API-Fehler=997 Laenge des SIDs=12 Bytes faer ACL=72 Raeckgabe von InitializeAcl=1 Letzter API-Fehler=997 Raeckgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Raeckgabe von IsValidAcl faer den DACL=1 Letzter API-Fehler=997 DACL ist vorhanden! Raeckgabe von GetAclInformation=1 Letzter API-Fehler=997 Anzahl benutzter Bytes in DACL=52 Anzahl freier Bytes in DACL=56 ACEs in DACL=2 Graeße des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=16 Fehlercode IsValidSid=1 Letzter API Fehler=997 Raeckgabe von LookupAccountSid=0 Letzter API-Fehler=1332 Reset des API-Fehlers wird durchgefaehrt 1. ACE Bezogen auf SID= Accessrechte des 1. ACEs=$1F01FF Raeckgabe von AddAce an Punkt 1=0 Letzter API-Fehler=87 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=0 Letzter API-Fehler=87 Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Fehlercode IsValidSid=1 Letzter API Fehler=87 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 2. ACE Bezogen auf SID=Jeder Accessrechte des 2. ACEs=$1101BF Bei ALLOWED_ACE zu addierende Rechte=$1001BF Raeckgabe von AddAce an Punkt 2=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1 Letzter API-Fehler=0 Bei DENIED_ACE... ...zu addierende Rechte=$10000 Raeckgabe von AddAce an Punkt 0=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1 Letzter API-Fehler=0 Raeckgabe von InitializeSecurityDescriptor=1 Letzter API-Fehler=0 Raeckgabe von SetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Raeckgabe von SetFileSecurity=1 Letzter API-Fehler=0 Fehlercode IsValidSid=1 Letzter API Fehler=0 Fehlercode LookupAccountSid=1 Letzter API Fehler=997 Administratoren ****PROZEDUR gestartet**** Gewaehlte Datei=Cokumente und EinstellungenPackard BellDesktopwischenablage01.bmp Gruppenname/Username=Administratoren Zu Addierende Rechte=... 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 Letzter API-Fehler=997 Raeckgabe von GetVolumeInformation=1 Letzter API-Fehler=997 Laufwerksflags=1010000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschraenkbar Raeckgabe von GetFileSecurity=0 Letzter API-Fehler=122 Erforderliche Laenge des Security Descriptor=148 Raeckgabe von GetFileSecurity=1 Letzter API-Fehler=0 Raeckgabe von IsValidSecurityDescriptor=1 Letzter API-Fehler=0 Raeckgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den DACL=1 Letzter API-Fehler=0 DACL ist vorhanden! Raeckgabe von GetAclInformation=1 Letzter API-Fehler=0 Anzahl benutzter Bytes in DACL=48 Anzahl freier Bytes in DACL=24 ACEs in DACL=2 Graeße des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Fehlercode IsValidSid=1 Letzter API Fehler=0 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Raeckgabe von LocalFree faer den String-SID=0 Letzter API-Fehler=0 String-SID des 1. ACEs=S-1-1-0 1. ACE Bezogen auf SID=Jeder 1. ACE Bezogen auf Domainname= Accessrechte des 1. ACEs=$10000 Recht im 1. ACE=_DELETE (Datei laeschen) Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Fehlercode IsValidSid=1 Letzter API Fehler=0 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Raeckgabe von LocalFree faer den String-SID=0 Letzter API-Fehler=0 String-SID des 2. ACEs=S-1-1-0 2. ACE Bezogen auf SID=Jeder 2. ACE Bezogen auf Domainname= Accessrechte des 2. ACEs=$1001BF Recht im 2. ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen) Recht im 2. ACE=FILE_WRITE_DATA (Erlaubt Daten zu Scheiben) Recht im 2. ACE=FILE_APPEND_DATA (Erlaubt Daten anzuhaengen) Recht im 2. ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen) Recht im 2. ACE=FILE_WRITE_EA (Erlaubt erweiterte Attribute zu schreiben) Recht im 2. ACE=FILE_EXECUTE (Erlaubt eine Datei auszufaehren) Recht im 2. ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute) Recht im 2. ACE=FILE_WRITE_ATTRIBUTES (aendern der Fileattribute) Recht im 2. ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten) Raeckgabe von LookupAccountName faer Administratoren=0 Letzter API-Fehler=122 Laenge des SIDs=16 Raeckgabe von LookupAccountName faer Administratoren=1 Letzter API-Fehler=997 Laenge des SIDs=16 Bytes faer ACL=72 Raeckgabe von InitializeAcl=1 Letzter API-Fehler=997 Raeckgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Raeckgabe von IsValidAcl faer den DACL=1 Letzter API-Fehler=997 DACL ist vorhanden! Raeckgabe von GetAclInformation=1 Letzter API-Fehler=997 Anzahl benutzter Bytes in DACL=48 Anzahl freier Bytes in DACL=24 ACEs in DACL=2 Graeße des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Vererbung=0 Fehlercode IsValidSid=1 Letzter API Fehler=997 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 1. ACE Bezogen auf SID=Jeder Accessrechte des 1. ACEs=$10000 Raeckgabe von AddAce an Punkt 0=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1 Letzter API-Fehler=0 Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Fehlercode IsValidSid=1 Letzter API Fehler=0 Raeckgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 2. ACE Bezogen auf SID=Jeder Accessrechte des 2. ACEs=$1001BF Raeckgabe von AddAce an Punkt 1=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1 Letzter API-Fehler=0 Bei ALLOWED_ACE... ...zu addierende Rechte=$11F01FF Raeckgabe von AddAce an Punkt 2=1 Letzter API-Fehler=0 Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1 Letzter API-Fehler=0 Raeckgabe von InitializeSecurityDescriptor=1 Letzter API-Fehler=0 Raeckgabe von SetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Raeckgabe von SetFileSecurity=1 Letzter API-Fehler=0[/quote:3d16bd5b50]Salve. |
| | | | |
| | | Hallo IF...
Füge der Datei bitte mal über den WindowsExplorer 2 weitere ACLs hinzu. Als driien Aufruf füge dann mal deinen Usernamen ein und lasse die volle Rechte geben (wie bei Andreas). Starte dann noch einmal die Prozedur... Wenn du dann die ACLS im Windows Explorer betrachtest - wurden sie richtig gesetzt??? |
| | | | |
|
AntwortenThemenoptionen | 2.434 Betrachtungen |
ThemeninformationenDieses Thema hat 4 Teilnehmer: |