Français
Forum

Filesecurity mettons: Voir le texte source

 
allô Profaner...

encore einmal quoi zum Testen sous NT/2000/XP:
KompilierenMarqueSéparation
DEF @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?
 
15.05.2005  
 



je erhalte ca: [box:f2ad52123f]Fehlercode IsValidSid=1
dernier API Fehler=0
Fehlercode LookupAccountSid=1
dernier API Fehler=997
chacun[/box:f2ad52123f]Salve.
 
15.05.2005  
 




CB
chez mir völlig identisches Resultat.

Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
15.05.2005  
 



OK...

cela Problem scheint alors aussi gelöst trop son - à chacun viens je maintenant ran...
 
16.05.2005  
 



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...
 
18.05.2005  
 



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éparation
DEF @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)

 
21.05.2005  
 




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
 
21.05.2005  
 



allô Rolf...

Sieht sur den ersten perspective pas mal aus. Hauts hin ou bien gibts Probleme? Stimmt cela avec den Werten im Explorer uberein?
 
21.05.2005  
 




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
 
21.05.2005  
 



Hab beim Spielen avec qui PROC encore un paire faute entdeckt.
KompilierenMarqueSéparation
DEF @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(&quot;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)

 
21.05.2005  
 



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.
 
21.05.2005  
 



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???
 
21.05.2005  
 




répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

s'il te plaît s'inscrire um une Beitrag trop verfassen.
 

Options du sujet

2.441 Views

Untitledvor 0 min.
H.Brill13.05.2021
RudiB.31.01.2016
Andreas Koch12.06.2012

Themeninformationen



Admins  |  AGB  |  Applications  |  Auteurs  |  Chat  |  protection des données  |  Télécharger  |  Entrance  |  Aider  |  Merchantportal  |  Empreinte  |  Mart  |  Interfaces  |  SDK  |  Services  |  Jeux  |  cherche  |  Support

un projet aller XProfaner, qui il y a!


Mon XProfan
Privé Nouvelles
Eigenes Ablageforum
Sujets-La liste de voeux
Eigene Posts
Eigene Sujets
Zwischenablage
Annuler
 Deutsch English Français Español Italia
Traductions

protection des données


Wir verwenden Cookies seulement comme Session-Cookies à cause de qui technischen Notwendigkeit et chez uns gibt es aucun Cookies de Drittanbietern.

si du ici sur unsere Webseite klickst ou bien navigierst, stimmst du unserer Erfassung de Informationen dans unseren Cookies sur XProfan.Net trop.

Weitere Informationen trop unseren Cookies et en supplément, comment du qui Kontrolle par-dessus behältst, findest du dans unserer nachfolgenden Datenschutzerklärung.


d'accordDatenschutzerklärung
je voudrais keinen Cookie