Forum | | | | | allô Profaner...
encore einmal quoi zum Testen sous NT/2000/XP: KompilierenMarqueSéparationDEF @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 un String retour? comment sieht es avec États-Unis-Systemen aus? |
| | | | |
| | | je erhalte ca: [box:f2ad52123f]Fehlercode IsValidSid=1 dernier API Fehler=0 Fehlercode LookupAccountSid=1 dernier API Fehler=997 chacun[/box:f2ad52123f]Salve. |
| | | | |
| | CB | chez mir völlig identisches Resultat.
Christian |
| | | | |
| | | OK...
cela Problem scheint alors aussi gelöst trop son - à chacun viens je maintenant ran... |
| | | | |
| | | Zum Hintergrund:
Um chaque User eines Systems z.B. den Zugriff sur une allgemeine banque de données trop erlauben, doit je une Gruppe angeben, qui wirklich chacun registrierte User angehört. Aus qui Beschreibung qui Bestandteile eines SIDs et dem String-SID nehme je à, qui qui SID pour qui Gruppe chacun sur allen Systemen juste son pourrait. j'ai alors une SID chacun per main erstellt. Aus diesem SID habe je ensuite den Gruppennamen de chacun ermittelt - qui doit oui pas toujours chacun son, mais wird sur jedenfall zumindestens de qui Discours des Betriebssystems dépendre. Aus euren Rückmeldungen entnehme je seulement einmal, qui qui l'affaire wirklich so funktioniert, comment je vous verstanden habe.
pourquoi so viele Zwischentests? je verfüge ici seulement sur une très kleine NTFS Partition, et qui liegt pas sur qui Festplatte, sur qui sich mon Betriebssystem est. là sans Tests genauere Aussagen trop rendez-vous si wirklich quelque chose klappt, ist très schwierig.
si alles klappt, wird es am Ende cet Wochenendes (ensuite habe je wieder quelque chose Zeit, ungestört trop proggen) une Procédure donner, qui de einem Adminaccount aus sous anderem une Dossier ou bien une Dossier pour alle Nutzer eines Systems freigeben peux et seulement cela Effacer qui Dossier verhindert.
PS: quoi pour Fichiers gilt, ist aussi 1:1 sur qui Registry übertragbar. c'est alors sous NT possible, Registry Keys vers Fremdnutzung trop sperren, en Aufrufe aufzeichnen trop laisser ou bien Keys allen Benutzern freizugeben... |
| | | | |
| | | la première Testversion qui PROC zum mettons qui Security ist fertig! s'il te plaît seulement avec eigens pour erzeugten Files testen! Hoffe sur reichlich Rückmeldungen... KompilierenMarqueSéparationDEF @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&qu pan>
Set_ACE_IN_DACL Dossier$,@$ (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 Dossier$, "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-part:cba7059298] Fehlercode IsValidSid=1 dernier API Fehler=0 Fehlercode LookupAccountSid=1 dernier API Fehler=997 chacun ****PROZEDUR gestartet**** Gewählte Datei=C:druck.txt Gruppenname/Username=Jeder trop Addierende Rechte=F_DELETE dernier API-Fehler=997 Rückgabe de GetVolumeInformation=1 dernier API-Fehler=997 Laufwerksflags=1110000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschränkbar Rückgabe de GetFileSecurity=0 dernier API-Fehler=122 Erforderliche Longueur des Security Descriptor=188 Rückgabe de GetFileSecurity=1 dernier API-Fehler=0 Rückgabe de IsValidSecurityDescriptor=1 dernier API-Fehler=0 Rückgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=0 Rückgabe de IsValidAcl pour den DACL=1 dernier API-Fehler=0 DACL ist vorhanden! Rückgabe de GetAclInformation=1 dernier API-Fehler=0 Anzahl benutzter Bytes dans DACL=112 Anzahl freier Bytes dans DACL=0 ACEs dans DACL=4 Taille des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Rückgabe de LocalFree pour den String-SID=0 dernier API-Fehler=0 String-SID des 1. ACEs=S-1-5-32-544 1. ACE Bezogen sur SID=Administratoren 1. ACE Bezogen sur Domainname=VORDEFINIERT Accessrechte des 1. ACEs=$1F01FF droite im 1. ACE=FILE_ALL_ACCESS (Vollzugriff) Taille des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Rückgabe de LocalFree pour den String-SID=0 dernier API-Fehler=0 String-SID des 2. ACEs=S-1-5-18 2. ACE Bezogen sur SID=SYSTEM 2. ACE Bezogen sur Domainname=NT-AUTORITÄT Accessrechte des 2. ACEs=$1F01FF droite im 2. ACE=FILE_ALL_ACCESS (Vollzugriff) Taille des 3.ACEs=36 ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Rückgabe de LocalFree pour den String-SID=0 dernier API-Fehler=0 String-SID des 3. ACEs=S-1-5-21-1708537768-1644491937-839522115-1003 3. ACE Bezogen sur SID=Rolf 3. ACE Bezogen sur Domainname=ROCKNROLF Accessrechte des 3. ACEs=$1F01FF droite im 3. ACE=FILE_ALL_ACCESS (Vollzugriff) Taille des 4.ACEs=24 ACE Typ des 4.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Rückgabe de LocalFree pour den String-SID=0 dernier API-Fehler=0 String-SID des 4. ACEs=S-1-5-32-545 4. ACE Bezogen sur SID=Benutzer 4. ACE Bezogen sur Domainname=VORDEFINIERT Accessrechte des 4. ACEs=$1200A9 droite im 4. ACE=FILE_READ_DATA (Erlaubt données aus einem File trop lesen) droite im 4. ACE=FILE_READ_EA (Erlaubt Avancé Attibute trop lesen) droite im 4. ACE=FILE_EXECUTE (Erlaubt une Dossier auszuführen) droite im 4. ACE=FILE_READ_ATTRIBUTES (Lesen qui Fileattribute) droite im 4. ACE=READ_CONTROL (Lesen qui DACL Einträge et Besitzer) droite im 4. ACE=SYNCHRONIZE (Erlaubt einem FileHandle sur un Complitition I/O trop attendre) Rückgabe de LookupAccountName pour Jeder=0 dernier API-Fehler=122 Longueur des SIDs=12 Rückgabe de LookupAccountName pour Jeder=1 dernier API-Fehler=997 Longueur des SIDs=12 Bytes pour ACL=28 Rückgabe de InitializeAcl=1 dernier API-Fehler=997 Rückgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=997 Rückgabe de IsValidAcl pour den DACL=1 dernier API-Fehler=997 DACL ist vorhanden! Rückgabe de GetAclInformation=1 dernier API-Fehler=997 Anzahl benutzter Bytes dans DACL=112 Anzahl freier Bytes dans DACL=0 ACEs dans DACL=4 Taille des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt 1. ACE Bezogen sur SID=Administratoren Accessrechte des 1. ACEs=$1F01FF Taille des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt 2. ACE Bezogen sur SID=SYSTEM Accessrechte des 2. ACEs=$1F01FF Taille des 3.ACEs=36 ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe de LookupAccountSid=0 dernier API-Fehler=1332 Reset des API-Fehlers wird durchgeführt 3. ACE Bezogen sur SID= Accessrechte des 3. ACEs=$1F01FF Taille des 4.ACEs=24 ACE Typ des 4.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt 4. ACE Bezogen sur SID=Benutzer Accessrechte des 4. ACEs=$1200A9 chez DENIED_ACE... ...trop addierende Rechte=$10000 Rückgabe de AddAce=1 dernier API-Fehler=0 Rückgabe de IsValidAcl pour den selbsterzeugten DACL=1 dernier API-Fehler=0 Rückgabe de InitializeSecurityDescriptor=1 dernier API-Fehler=0 Rückgabe de SetSecurityDescriptorDacl=1 dernier API-Fehler=0 Rückgabe de SetFileSecurity=1 dernier API-Fehler=0 Fehlercode IsValidSid=1 dernier API Fehler=0 Fehlercode LookupAccountSid=1 dernier API Fehler=997 chacun ****PROZEDUR gestartet**** Gewählte Datei=C:druck.txt Gruppenname/Username=Jeder trop 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 dernier API-Fehler=997 Rückgabe de GetVolumeInformation=1 dernier API-Fehler=997 Laufwerksflags=1110000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschränkbar Rückgabe de GetFileSecurity=0 dernier API-Fehler=122 Erforderliche Longueur des Security Descriptor=104 Rückgabe de GetFileSecurity=1 dernier API-Fehler=0 Rückgabe de IsValidSecurityDescriptor=1 dernier API-Fehler=0 Rückgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=0 Rückgabe de IsValidAcl pour den DACL=1 dernier API-Fehler=0 DACL ist vorhanden! Rückgabe de GetAclInformation=1 dernier API-Fehler=0 Anzahl benutzter Bytes dans DACL=28 Anzahl freier Bytes dans DACL=0 ACEs dans DACL=1 Taille des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Rückgabe de LocalFree pour den String-SID=0 dernier API-Fehler=0 String-SID des 1. ACEs=S-1-1-0 1. ACE Bezogen sur SID=Jeder 1. ACE Bezogen sur Domainname= Accessrechte des 1. ACEs=$10000 droite im 1. ACE=_DELETE (Dossier effacer) Rückgabe de LookupAccountName pour Jeder=0 dernier API-Fehler=122 Longueur des SIDs=12 Rückgabe de LookupAccountName pour Jeder=1 dernier API-Fehler=997 Longueur des SIDs=12 Bytes pour ACL=48 Rückgabe de InitializeAcl=1 dernier API-Fehler=997 Rückgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=997 Rückgabe de IsValidAcl pour den DACL=1 dernier API-Fehler=997 DACL ist vorhanden! Rückgabe de GetAclInformation=1 dernier API-Fehler=997 Anzahl benutzter Bytes dans DACL=28 Anzahl freier Bytes dans DACL=0 ACEs dans DACL=1 Taille des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Vererbung=0 Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt 1. ACE Bezogen sur SID=Jeder Accessrechte des 1. ACEs=$10000 chez DENIED_ACE trop addierende Rechte=$0 Rückgabe de AddAce=1 dernier API-Fehler=0 Rückgabe de IsValidAcl pour den selbsterzeugten DACL=1 dernier API-Fehler=0 chez ALLOWED_ACE... ...trop addierende Rechte=$1101BF Rückgabe de AddAce=1 dernier API-Fehler=0 Rückgabe de IsValidAcl pour den selbsterzeugten DACL=1 dernier API-Fehler=0 Rückgabe de InitializeSecurityDescriptor=1 dernier API-Fehler=0 Rückgabe de SetSecurityDescriptorDacl=1 dernier API-Fehler=0 Rückgabe de SetFileSecurity=1 dernier API-Fehler=0 Fehlercode IsValidSid=1 dernier API Fehler=0 Fehlercode LookupAccountSid=1 dernier API Fehler=997 Administratoren ****PROZEDUR gestartet**** Gewählte Datei=C:druck.txt Gruppenname/Username=Administratoren trop 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 dernier API-Fehler=997 Rückgabe de GetVolumeInformation=1 dernier API-Fehler=997 Laufwerksflags=1110000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschränkbar Rückgabe de GetFileSecurity=0 dernier API-Fehler=122 Erforderliche Longueur des Security Descriptor=124 Rückgabe de GetFileSecurity=1 dernier API-Fehler=0 Rückgabe de IsValidSecurityDescriptor=1 dernier API-Fehler=0 Rückgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=0 Rückgabe de IsValidAcl pour den DACL=1 dernier API-Fehler=0 DACL ist vorhanden! Rückgabe de GetAclInformation=1 dernier API-Fehler=0 Anzahl benutzter Bytes dans DACL=48 Anzahl freier Bytes dans DACL=0 ACEs dans DACL=2 Taille des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Rückgabe de LocalFree pour den String-SID=0 dernier API-Fehler=0 String-SID des 1. ACEs=S-1-1-0 1. ACE Bezogen sur SID=Jeder 1. ACE Bezogen sur Domainname= Accessrechte des 1. ACEs=$0 Taille des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Rückgabe de LocalFree pour den String-SID=0 dernier API-Fehler=0 String-SID des 2. ACEs=S-1-1-0 2. ACE Bezogen sur SID=Jeder 2. ACE Bezogen sur Domainname= Accessrechte des 2. ACEs=$1101BF droite im 2. ACE=FILE_READ_DATA (Erlaubt données aus einem File trop lesen) droite im 2. ACE=FILE_WRITE_DATA (Erlaubt données trop Scheiben) droite im 2. ACE=FILE_APPEND_DATA (Erlaubt données anzuhängen) droite im 2. ACE=FILE_READ_EA (Erlaubt Avancé Attibute trop lesen) droite im 2. ACE=FILE_WRITE_EA (Erlaubt Avancé Attribute trop écrivons) droite im 2. ACE=FILE_EXECUTE (Erlaubt une Dossier auszuführen) droite im 2. ACE=FILE_READ_ATTRIBUTES (Lesen qui Fileattribute) droite im 2. ACE=FILE_WRITE_ATTRIBUTES (Changement qui Fileattribute) droite im 2. ACE=SYNCHRONIZE (Erlaubt einem FileHandle sur un Complitition I/O trop attendre) droite im 2. ACE=_DELETE (Dossier effacer) Rückgabe de LookupAccountName pour Administratoren=0 dernier API-Fehler=122 Longueur des SIDs=16 Rückgabe de LookupAccountName pour Administratoren=1 dernier API-Fehler=997 Longueur des SIDs=16 Bytes pour ACL=72 Rückgabe de InitializeAcl=1 dernier API-Fehler=997 Rückgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=997 Rückgabe de IsValidAcl pour den DACL=1 dernier API-Fehler=997 DACL ist vorhanden! Rückgabe de GetAclInformation=1 dernier API-Fehler=997 Anzahl benutzter Bytes dans DACL=48 Anzahl freier Bytes dans DACL=0 ACEs dans DACL=2 Taille des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Vererbung=0 Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt 1. ACE Bezogen sur SID=Jeder Accessrechte des 1. ACEs=$0 Rückgabe de AddAce=1 dernier API-Fehler=0 Rückgabe de IsValidAcl pour den selbsterzeugten DACL=1 dernier API-Fehler=0 Taille des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Rückgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgeführt 2. ACE Bezogen sur SID=Jeder Accessrechte des 2. ACEs=$1101BF Rückgabe de AddAce=1 dernier API-Fehler=0 Rückgabe de IsValidAcl pour den selbsterzeugten DACL=1 dernier API-Fehler=0 chez ALLOWED_ACE... ...trop addierende Rechte=$11F01FF Rückgabe de AddAce=1 dernier API-Fehler=0 Rückgabe de IsValidAcl pour den selbsterzeugten DACL=1 dernier API-Fehler=0 Rückgabe de InitializeSecurityDescriptor=1 dernier API-Fehler=0 Rückgabe de SetSecurityDescriptorDacl=1 dernier API-Fehler=0 Rückgabe de SetFileSecurity=1 dernier API-Fehler=0 [/quote-part:cba7059298] Rolf |
| | | | |
| | | allô Rolf...
Sieht sur den ersten perspective pas mal aus. Hauts hin ou bien gibts Probleme? Stimmt cela avec den Werten im Explorer uberein? |
| | | | |
| | Rolf Koch | So comment je es sur den ersten perspective vois, ist alles OK. Werde mais bestimmt weitertesten. vais juste mais d'abord la fois sur un IN EXTREMO Konzert ici dans Koblenz *freu*
Rolf |
| | | | |
| | | Hab beim Spielen avec qui PROC encore un paire faute entdeckt. KompilierenMarqueSéparationDEF @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& /span>
Set_ACE_IN_DACL Dossier$,@$ (0), "-", "F_DELETE"
Get_Group_Name "Administratoren"
Set_ACE_IN_DACL Dossier$,@$ (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-part:3d16bd5b50]Fehlercode IsValidSid=1 dernier API Fehler=0 Fehlercode LookupAccountSid=1 dernier API Fehler=997 chacun ****PROZEDUR gestartet**** Gewaehlte Datei=Cokumente et EinstellungenPackard BellDesktopwischenablage01.bmp Gruppenname/Username=Jeder trop 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 dernier API-Fehler=997 Raeckgabe de GetVolumeInformation=1 dernier API-Fehler=997 Laufwerksflags=1010000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschraenkbar Raeckgabe de GetFileSecurity=0 dernier API-Fehler=122 Erforderliche Laenge des Security Descriptor=164 Raeckgabe de GetFileSecurity=1 dernier API-Fehler=0 Raeckgabe de IsValidSecurityDescriptor=1 dernier API-Fehler=0 Raeckgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den DACL=1 dernier API-Fehler=0 DACL ist vorhanden! Raeckgabe de GetAclInformation=1 dernier API-Fehler=0 Anzahl benutzter Bytes dans DACL=88 Anzahl freier Bytes dans DACL=0 ACEs dans DACL=3 Graeße des 1.ACEs=36 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Fehlercode IsValidSid=1 dernier API Fehler=0 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Raeckgabe de LocalFree faer den String-SID=0 dernier API-Fehler=0 String-SID des 1. ACEs=S-1-5-21-789336058-1343024091-854245398-1004 1. ACE Bezogen sur SID=Packard Bell 1. ACE Bezogen sur Domainname=C4 Accessrechte des 1. ACEs=$1F01FF droite 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 dernier API Fehler=0 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Raeckgabe de LocalFree faer den String-SID=0 dernier API-Fehler=0 String-SID des 2. ACEs=S-1-5-18 2. ACE Bezogen sur SID=SYSTEM 2. ACE Bezogen sur Domainname=NT-AUTORITÄT Accessrechte des 2. ACEs=$1F01FF droite 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 dernier API Fehler=0 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Raeckgabe de LocalFree faer den String-SID=0 dernier API-Fehler=0 String-SID des 3. ACEs=S-1-5-32-544 3. ACE Bezogen sur SID=Administratoren 3. ACE Bezogen sur Domainname=VORDEFINIERT Accessrechte des 3. ACEs=$1F01FF droite im 3. ACE=FILE_ALL_ACCESS (Vollzugriff) Raeckgabe de LookupAccountName faer Jeder=0 dernier API-Fehler=122 Laenge des SIDs=12 Raeckgabe de LookupAccountName faer Jeder=1 dernier API-Fehler=997 Laenge des SIDs=12 Bytes faer ACL=108 Raeckgabe de InitializeAcl=1 dernier API-Fehler=997 Raeckgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=997 Raeckgabe de IsValidAcl faer den DACL=1 dernier API-Fehler=997 DACL ist vorhanden! Raeckgabe de GetAclInformation=1 dernier API-Fehler=997 Anzahl benutzter Bytes dans DACL=88 Anzahl freier Bytes dans DACL=0 ACEs dans DACL=3 Graeße des 1.ACEs=36 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=16 Fehlercode IsValidSid=1 dernier API Fehler=997 Raeckgabe de LookupAccountSid=0 dernier API-Fehler=1332 Reset des API-Fehlers wird durchgefaehrt 1. ACE Bezogen sur SID= Accessrechte des 1. ACEs=$1F01FF Raeckgabe de AddAce à Punkt 0=0 dernier API-Fehler=87 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=0 dernier API-Fehler=87 Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=16 Fehlercode IsValidSid=1 dernier API Fehler=87 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 2. ACE Bezogen sur SID=SYSTEM Accessrechte des 2. ACEs=$1F01FF Raeckgabe de AddAce à Punkt 1=0 dernier API-Fehler=87 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=0 dernier API-Fehler=87 Graeße des 3.ACEs=24 ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=16 Fehlercode IsValidSid=1 dernier API Fehler=87 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 3. ACE Bezogen sur SID=Administratoren Accessrechte des 3. ACEs=$1F01FF Raeckgabe de AddAce à Punkt 2=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=1 dernier API-Fehler=0 chez ALLOWED_ACE... ...trop addierende Rechte=$1101BF Raeckgabe de AddAce à Punkt 3=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=1 dernier API-Fehler=0 Raeckgabe de InitializeSecurityDescriptor=1 dernier API-Fehler=0 Raeckgabe de SetSecurityDescriptorDacl=1 dernier API-Fehler=0 Raeckgabe de SetFileSecurity=1 dernier API-Fehler=0 Fehlercode IsValidSid=1 dernier API Fehler=0 Fehlercode LookupAccountSid=1 dernier API Fehler=997 chacun ****PROZEDUR gestartet**** Gewaehlte Datei=Cokumente et EinstellungenPackard BellDesktopwischenablage01.bmp Gruppenname/Username=Jeder trop Addierende Rechte=... F_DELETE dernier API-Fehler=997 Raeckgabe de GetVolumeInformation=1 dernier API-Fehler=997 Laufwerksflags=1010000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschraenkbar Raeckgabe de GetFileSecurity=0 dernier API-Fehler=122 Erforderliche Laenge des Security Descriptor=184 Raeckgabe de GetFileSecurity=1 dernier API-Fehler=0 Raeckgabe de IsValidSecurityDescriptor=1 dernier API-Fehler=0 Raeckgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den DACL=1 dernier API-Fehler=0 DACL ist vorhanden! Raeckgabe de GetAclInformation=1 dernier API-Fehler=0 Anzahl benutzter Bytes dans DACL=52 Anzahl freier Bytes dans DACL=56 ACEs dans DACL=2 Graeße des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Fehlercode IsValidSid=1 dernier API Fehler=0 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Raeckgabe de LocalFree faer den String-SID=0 dernier API-Fehler=0 String-SID des 1. ACEs=S-1-5-32-544 1. ACE Bezogen sur SID=Administratoren 1. ACE Bezogen sur Domainname=VORDEFINIERT Accessrechte des 1. ACEs=$1F01FF droite 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 dernier API Fehler=0 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Raeckgabe de LocalFree faer den String-SID=0 dernier API-Fehler=0 String-SID des 2. ACEs=S-1-1-0 2. ACE Bezogen sur SID=Jeder 2. ACE Bezogen sur Domainname= Accessrechte des 2. ACEs=$1101BF droite im 2. ACE=FILE_READ_DATA (Erlaubt données aus einem File trop lesen) droite im 2. ACE=FILE_WRITE_DATA (Erlaubt données trop Scheiben) droite im 2. ACE=FILE_APPEND_DATA (Erlaubt données anzuhaengen) droite im 2. ACE=FILE_READ_EA (Erlaubt Avancé Attibute trop lesen) droite im 2. ACE=FILE_WRITE_EA (Erlaubt Avancé Attribute trop écrivons) droite im 2. ACE=FILE_EXECUTE (Erlaubt une Dossier auszufaehren) droite im 2. ACE=FILE_READ_ATTRIBUTES (Lesen qui Fileattribute) droite im 2. ACE=FILE_WRITE_ATTRIBUTES (aendern qui Fileattribute) droite im 2. ACE=SYNCHRONIZE (Erlaubt einem FileHandle sur un Complitition I/O trop attendre) droite im 2. ACE=_DELETE (Dossier laeschen) Raeckgabe de LookupAccountName faer Jeder=0 dernier API-Fehler=122 Laenge des SIDs=12 Raeckgabe de LookupAccountName faer Jeder=1 dernier API-Fehler=997 Laenge des SIDs=12 Bytes faer ACL=72 Raeckgabe de InitializeAcl=1 dernier API-Fehler=997 Raeckgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=997 Raeckgabe de IsValidAcl faer den DACL=1 dernier API-Fehler=997 DACL ist vorhanden! Raeckgabe de GetAclInformation=1 dernier API-Fehler=997 Anzahl benutzter Bytes dans DACL=52 Anzahl freier Bytes dans DACL=56 ACEs dans DACL=2 Graeße des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=16 Fehlercode IsValidSid=1 dernier API Fehler=997 Raeckgabe de LookupAccountSid=0 dernier API-Fehler=1332 Reset des API-Fehlers wird durchgefaehrt 1. ACE Bezogen sur SID= Accessrechte des 1. ACEs=$1F01FF Raeckgabe de AddAce à Punkt 1=0 dernier API-Fehler=87 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=0 dernier API-Fehler=87 Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Fehlercode IsValidSid=1 dernier API Fehler=87 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 2. ACE Bezogen sur SID=Jeder Accessrechte des 2. ACEs=$1101BF chez ALLOWED_ACE trop addierende Rechte=$1001BF Raeckgabe de AddAce à Punkt 2=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=1 dernier API-Fehler=0 chez DENIED_ACE... ...trop addierende Rechte=$10000 Raeckgabe de AddAce à Punkt 0=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=1 dernier API-Fehler=0 Raeckgabe de InitializeSecurityDescriptor=1 dernier API-Fehler=0 Raeckgabe de SetSecurityDescriptorDacl=1 dernier API-Fehler=0 Raeckgabe de SetFileSecurity=1 dernier API-Fehler=0 Fehlercode IsValidSid=1 dernier API Fehler=0 Fehlercode LookupAccountSid=1 dernier API Fehler=997 Administratoren ****PROZEDUR gestartet**** Gewaehlte Datei=Cokumente et EinstellungenPackard BellDesktopwischenablage01.bmp Gruppenname/Username=Administratoren trop 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 dernier API-Fehler=997 Raeckgabe de GetVolumeInformation=1 dernier API-Fehler=997 Laufwerksflags=1010000000011111111 Ausgelesene Partition=NTFS Zugriff ist einschraenkbar Raeckgabe de GetFileSecurity=0 dernier API-Fehler=122 Erforderliche Laenge des Security Descriptor=148 Raeckgabe de GetFileSecurity=1 dernier API-Fehler=0 Raeckgabe de IsValidSecurityDescriptor=1 dernier API-Fehler=0 Raeckgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den DACL=1 dernier API-Fehler=0 DACL ist vorhanden! Raeckgabe de GetAclInformation=1 dernier API-Fehler=0 Anzahl benutzter Bytes dans DACL=48 Anzahl freier Bytes dans DACL=24 ACEs dans DACL=2 Graeße des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Fehlercode IsValidSid=1 dernier API Fehler=0 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Raeckgabe de LocalFree faer den String-SID=0 dernier API-Fehler=0 String-SID des 1. ACEs=S-1-1-0 1. ACE Bezogen sur SID=Jeder 1. ACE Bezogen sur Domainname= Accessrechte des 1. ACEs=$10000 droite im 1. ACE=_DELETE (Dossier laeschen) Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Fehlercode IsValidSid=1 dernier API Fehler=0 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt Raeckgabe de ConvertSidToStringSid=1 dernier API-Fehler=0 Raeckgabe de LocalFree faer den String-SID=0 dernier API-Fehler=0 String-SID des 2. ACEs=S-1-1-0 2. ACE Bezogen sur SID=Jeder 2. ACE Bezogen sur Domainname= Accessrechte des 2. ACEs=$1001BF droite im 2. ACE=FILE_READ_DATA (Erlaubt données aus einem File trop lesen) droite im 2. ACE=FILE_WRITE_DATA (Erlaubt données trop Scheiben) droite im 2. ACE=FILE_APPEND_DATA (Erlaubt données anzuhaengen) droite im 2. ACE=FILE_READ_EA (Erlaubt Avancé Attibute trop lesen) droite im 2. ACE=FILE_WRITE_EA (Erlaubt Avancé Attribute trop écrivons) droite im 2. ACE=FILE_EXECUTE (Erlaubt une Dossier auszufaehren) droite im 2. ACE=FILE_READ_ATTRIBUTES (Lesen qui Fileattribute) droite im 2. ACE=FILE_WRITE_ATTRIBUTES (aendern qui Fileattribute) droite im 2. ACE=SYNCHRONIZE (Erlaubt einem FileHandle sur un Complitition I/O trop attendre) Raeckgabe de LookupAccountName faer Administratoren=0 dernier API-Fehler=122 Laenge des SIDs=16 Raeckgabe de LookupAccountName faer Administratoren=1 dernier API-Fehler=997 Laenge des SIDs=16 Bytes faer ACL=72 Raeckgabe de InitializeAcl=1 dernier API-Fehler=997 Raeckgabe de GetSecurityDescriptorDacl=1 dernier API-Fehler=997 Raeckgabe de IsValidAcl faer den DACL=1 dernier API-Fehler=997 DACL ist vorhanden! Raeckgabe de GetAclInformation=1 dernier API-Fehler=997 Anzahl benutzter Bytes dans DACL=48 Anzahl freier Bytes dans DACL=24 ACEs dans DACL=2 Graeße des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Vererbung=0 Fehlercode IsValidSid=1 dernier API Fehler=997 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 1. ACE Bezogen sur SID=Jeder Accessrechte des 1. ACEs=$10000 Raeckgabe de AddAce à Punkt 0=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=1 dernier API-Fehler=0 Graeße des 2.ACEs=20 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Vererbung=0 Fehlercode IsValidSid=1 dernier API Fehler=0 Raeckgabe de LookupAccountSid=1 dernier API-Fehler=997 Reset des API-Fehlers wird durchgefaehrt 2. ACE Bezogen sur SID=Jeder Accessrechte des 2. ACEs=$1001BF Raeckgabe de AddAce à Punkt 1=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=1 dernier API-Fehler=0 chez ALLOWED_ACE... ...trop addierende Rechte=$11F01FF Raeckgabe de AddAce à Punkt 2=1 dernier API-Fehler=0 Raeckgabe de IsValidAcl faer den selbsterzeugten DACL=1 dernier API-Fehler=0 Raeckgabe de InitializeSecurityDescriptor=1 dernier API-Fehler=0 Raeckgabe de SetSecurityDescriptorDacl=1 dernier API-Fehler=0 Raeckgabe de SetFileSecurity=1 dernier API-Fehler=0[/quote-part:3d16bd5b50]Salve. |
| | | | |
| | | allô IF...
Füge qui Dossier s'il te plaît la fois sur den WindowsExplorer 2 weitere ACLs hinzu. comme driien Aufruf füge ensuite la fois deinen Usernamen un et lasse qui volle Rechte donner (comment chez Andreas). Starte ensuite encore einmal qui Procédure... si du ensuite qui ACLS im Windows Explorer betrachtest - wurden vous richtig gesetzt??? |
| | | | |
|
répondreOptions du sujet | 2.429 Views |
Themeninformationencet Thema hat 4 participant: |