Deutsch
Forum

Filesecurity setzen: Quelltext

 
Hallo Profaner...

Noch einmal was zum Testen unter NT/2000/XP:
KompilierenMarkierenSeparieren
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 ein String zurückgegeben? Wie sieht es mit US-Systemen aus?
 
15.05.2005  
 



Ich erhalte dies: [box:f2ad52123f]Fehlercode IsValidSid=1
Letzter API Fehler=0
Fehlercode LookupAccountSid=1
Letzter API Fehler=997
Jeder[/box:f2ad52123f]Salve.
 
15.05.2005  
 




CB
Bei mir völlig identisches Resultat.

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



OK...

Das Problem scheint also auch gelöst zu sein - an Jeder komme ich jetzt ran...
 
16.05.2005  
 



Zum Hintergrund:

Um jedem User eines Systems z.B. den Zugriff auf eine allgemeine Datenbank zu erlauben, muß ich eine Gruppe angeben, der wirklich jeder registrierte User angehört.
Aus der Beschreibung der Bestandteile eines SIDs und dem String-SID nehme ich an, daß der SID für die Gruppe Jeder auf allen Systemen gleich sein dürfte.
Ich habe also einen SID Jeder per Hand erstellt.
Aus diesem SID habe ich dann den Gruppennamen von Jeder ermittelt - der muß ja nicht immer Jeder sein, sondern wird auf jedenfall zumindestens von der Sprache des Betriebssystems abhängen.
Aus euren Rückmeldungen entnehme ich erst einmal, daß die Sache wirklich so funktioniert, wie ich sie verstanden habe.

Warum so viele Zwischentests?
Ich verfüge hier nur über eine sehr kleine NTFS Partition, und die liegt nicht auf der Festplatte, auf der sich mein Betriebssystem befindet.
Da ohne Tests genauere Aussagen zu treffen ob wirklich etwas klappt, ist sehr schwierig.

Wenn alles klappt, wird es am Ende dieses Wochenendes (dann habe ich wieder etwas Zeit, ungestört zu proggen) eine Prozedur geben, die von einem Adminaccount aus unter anderem eine Datei oder einen Ordner für alle Nutzer eines Systems freigeben kann und nur das Löschen der Datei verhindert.

PS: Was für Dateien gilt, ist auch 1:1 auf die Registry übertragbar. Es ist also unter NT möglich, Registry Keys gegen Fremdnutzung zu sperren, deren Aufrufe aufzeichnen zu lassen oder Keys allen Benutzern freizugeben...
 
18.05.2005  
 



Die erste Testversion der PROC zum setzen der Security ist fertig! Bitte nur mit eigens dafür erzeugten Files testen!
Hoffe auf reichlich Rückmeldungen...
KompilierenMarkierenSeparieren
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"
Set_ACE_IN_DACL Datei$,@$(0),"+","FILE_DELETE_CHILD READ_CONTROL ACCESS_SYSTEM_SECURITY WRITE_OWNER WRITE_DAC F_DELETE SYNCHRONIZE FILE_WRITE_EA FILE_READ_EA FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_EXECUTE FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES F_DELETE"
Set_ACE_IN_DACL Datei$,"Andreas","+","SYNCHRONIZE FILE_WRITE_EA FILE_READ_EA FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_EXECUTE FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES F_DELETE"
@Editbox("API Rückgaben",1)

 
21.05.2005  
 




Rolf
Koch
Hi AH,
[quote:cba7059298]
Fehlercode IsValidSid=1
Letzter API Fehler=0
Fehlercode LookupAccountSid=1
Letzter API Fehler=997
Jeder
****PROZEDUR gestartet****
Gewählte Datei=C:druck.txt
Gruppenname/Username=Jeder
Zu Addierende Rechte=F_DELETE
Letzter API-Fehler=997
Rückgabe von GetVolumeInformation=1
Letzter API-Fehler=997
Laufwerksflags=1110000000011111111
Ausgelesene Partition=NTFS
Zugriff ist einschränkbar
Rückgabe von GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Länge des Security Descriptor=188
Rückgabe von GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe von IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Rückgabe von IsValidAcl für den DACL=1
Letzter API-Fehler=0
DACL ist vorhanden!
Rückgabe von GetAclInformation=1
Letzter API-Fehler=0
Anzahl benutzter Bytes in DACL=112
Anzahl freier Bytes in DACL=0
ACEs in DACL=4
Größe des 1.ACEs=24
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
Rückgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe von LocalFree für den String-SID=0
Letzter API-Fehler=0
String-SID des 1. ACEs=S-1-5-32-544
1. ACE Bezogen auf SID=Administratoren
1. ACE Bezogen auf Domainname=VORDEFINIERT
Accessrechte des 1. ACEs=$1F01FF
Recht im 1. ACE=FILE_ALL_ACCESS (Vollzugriff)
Größe des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
Rückgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe von LocalFree für den String-SID=0
Letzter API-Fehler=0
String-SID des 2. ACEs=S-1-5-18
2. ACE Bezogen auf SID=SYSTEM
2. ACE Bezogen auf Domainname=NT-AUTORITÄT
Accessrechte des 2. ACEs=$1F01FF
Recht im 2. ACE=FILE_ALL_ACCESS (Vollzugriff)
Größe des 3.ACEs=36
ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
Rückgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe von LocalFree für den String-SID=0
Letzter API-Fehler=0
String-SID des 3. ACEs=S-1-5-21-1708537768-1644491937-839522115-1003
3. ACE Bezogen auf SID=Rolf
3. ACE Bezogen auf Domainname=ROCKNROLF
Accessrechte des 3. ACEs=$1F01FF
Recht im 3. ACE=FILE_ALL_ACCESS (Vollzugriff)
Größe des 4.ACEs=24
ACE Typ des 4.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
Rückgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe von LocalFree für den String-SID=0
Letzter API-Fehler=0
String-SID des 4. ACEs=S-1-5-32-545
4. ACE Bezogen auf SID=Benutzer
4. ACE Bezogen auf Domainname=VORDEFINIERT
Accessrechte des 4. ACEs=$1200A9
Recht im 4. ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen)
Recht im 4. ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen)
Recht im 4. ACE=FILE_EXECUTE (Erlaubt eine Datei auszuführen)
Recht im 4. ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute)
Recht im 4. ACE=READ_CONTROL (Lesen der DACL Einträge und Besitzer)
Recht im 4. ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten)
Rückgabe von LookupAccountName für Jeder=0
Letzter API-Fehler=122
Länge des SIDs=12
Rückgabe von LookupAccountName für Jeder=1
Letzter API-Fehler=997
Länge des SIDs=12
Bytes für ACL=28
Rückgabe von InitializeAcl=1
Letzter API-Fehler=997
Rückgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Rückgabe von IsValidAcl für den DACL=1
Letzter API-Fehler=997
DACL ist vorhanden!
Rückgabe von GetAclInformation=1
Letzter API-Fehler=997
Anzahl benutzter Bytes in DACL=112
Anzahl freier Bytes in DACL=0
ACEs in DACL=4
Größe des 1.ACEs=24
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=0
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
1. ACE Bezogen auf SID=Administratoren
Accessrechte des 1. ACEs=$1F01FF
Größe des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=0
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
2. ACE Bezogen auf SID=SYSTEM
Accessrechte des 2. ACEs=$1F01FF
Größe des 3.ACEs=36
ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=0
Rückgabe von LookupAccountSid=0
Letzter API-Fehler=1332
Reset des API-Fehlers wird durchgeführt
3. ACE Bezogen auf SID=
Accessrechte des 3. ACEs=$1F01FF
Größe des 4.ACEs=24
ACE Typ des 4.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=0
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
4. ACE Bezogen auf SID=Benutzer
Accessrechte des 4. ACEs=$1200A9
Bei DENIED_ACE...
...zu addierende Rechte=$10000
Rückgabe von AddAce=1
Letzter API-Fehler=0
Rückgabe von IsValidAcl für den selbsterzeugten DACL=1
Letzter API-Fehler=0
Rückgabe von InitializeSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe von SetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Rückgabe von SetFileSecurity=1
Letzter API-Fehler=0
Fehlercode IsValidSid=1
Letzter API Fehler=0
Fehlercode LookupAccountSid=1
Letzter API Fehler=997
Jeder
****PROZEDUR gestartet****
Gewählte Datei=C:druck.txt
Gruppenname/Username=Jeder
Zu Addierende Rechte=SYNCHRONIZE FILE_WRITE_EA FILE_READ_EA FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_EXECUTE FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES F_DELETE
Letzter API-Fehler=997
Rückgabe von GetVolumeInformation=1
Letzter API-Fehler=997
Laufwerksflags=1110000000011111111
Ausgelesene Partition=NTFS
Zugriff ist einschränkbar
Rückgabe von GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Länge des Security Descriptor=104
Rückgabe von GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe von IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Rückgabe von IsValidAcl für den DACL=1
Letzter API-Fehler=0
DACL ist vorhanden!
Rückgabe von GetAclInformation=1
Letzter API-Fehler=0
Anzahl benutzter Bytes in DACL=28
Anzahl freier Bytes in DACL=0
ACEs in DACL=1
Größe des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
Rückgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe von LocalFree für den String-SID=0
Letzter API-Fehler=0
String-SID des 1. ACEs=S-1-1-0
1. ACE Bezogen auf SID=Jeder
1. ACE Bezogen auf Domainname=
Accessrechte des 1. ACEs=$10000
Recht im 1. ACE=_DELETE (Datei löschen)
Rückgabe von LookupAccountName für Jeder=0
Letzter API-Fehler=122
Länge des SIDs=12
Rückgabe von LookupAccountName für Jeder=1
Letzter API-Fehler=997
Länge des SIDs=12
Bytes für ACL=48
Rückgabe von InitializeAcl=1
Letzter API-Fehler=997
Rückgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Rückgabe von IsValidAcl für den DACL=1
Letzter API-Fehler=997
DACL ist vorhanden!
Rückgabe von GetAclInformation=1
Letzter API-Fehler=997
Anzahl benutzter Bytes in DACL=28
Anzahl freier Bytes in DACL=0
ACEs in DACL=1
Größe des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE
Vererbung=0
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
1. ACE Bezogen auf SID=Jeder
Accessrechte des 1. ACEs=$10000
Bei DENIED_ACE zu addierende Rechte=$0
Rückgabe von AddAce=1
Letzter API-Fehler=0
Rückgabe von IsValidAcl für den selbsterzeugten DACL=1
Letzter API-Fehler=0
Bei ALLOWED_ACE...
...zu addierende Rechte=$1101BF
Rückgabe von AddAce=1
Letzter API-Fehler=0
Rückgabe von IsValidAcl für den selbsterzeugten DACL=1
Letzter API-Fehler=0
Rückgabe von InitializeSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe von SetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Rückgabe von SetFileSecurity=1
Letzter API-Fehler=0
Fehlercode IsValidSid=1
Letzter API Fehler=0
Fehlercode LookupAccountSid=1
Letzter API Fehler=997
Administratoren
****PROZEDUR gestartet****
Gewählte Datei=C:druck.txt
Gruppenname/Username=Administratoren
Zu Addierende Rechte=FILE_DELETE_CHILD READ_CONTROL ACCESS_SYSTEM_SECURITY WRITE_OWNER WRITE_DAC F_DELETE SYNCHRONIZE FILE_WRITE_EA FILE_READ_EA FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_EXECUTE FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES F_DELETE
Letzter API-Fehler=997
Rückgabe von GetVolumeInformation=1
Letzter API-Fehler=997
Laufwerksflags=1110000000011111111
Ausgelesene Partition=NTFS
Zugriff ist einschränkbar
Rückgabe von GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Länge des Security Descriptor=124
Rückgabe von GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe von IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Rückgabe von IsValidAcl für den DACL=1
Letzter API-Fehler=0
DACL ist vorhanden!
Rückgabe von GetAclInformation=1
Letzter API-Fehler=0
Anzahl benutzter Bytes in DACL=48
Anzahl freier Bytes in DACL=0
ACEs in DACL=2
Größe des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
Rückgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe von LocalFree für den String-SID=0
Letzter API-Fehler=0
String-SID des 1. ACEs=S-1-1-0
1. ACE Bezogen auf SID=Jeder
1. ACE Bezogen auf Domainname=
Accessrechte des 1. ACEs=$0
Größe des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
Rückgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe von LocalFree für den String-SID=0
Letzter API-Fehler=0
String-SID des 2. ACEs=S-1-1-0
2. ACE Bezogen auf SID=Jeder
2. ACE Bezogen auf Domainname=
Accessrechte des 2. ACEs=$1101BF
Recht im 2. ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen)
Recht im 2. ACE=FILE_WRITE_DATA (Erlaubt Daten zu Scheiben)
Recht im 2. ACE=FILE_APPEND_DATA (Erlaubt Daten anzuhängen)
Recht im 2. ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen)
Recht im 2. ACE=FILE_WRITE_EA (Erlaubt erweiterte Attribute zu schreiben)
Recht im 2. ACE=FILE_EXECUTE (Erlaubt eine Datei auszuführen)
Recht im 2. ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute)
Recht im 2. ACE=FILE_WRITE_ATTRIBUTES (Ändern der Fileattribute)
Recht im 2. ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten)
Recht im 2. ACE=_DELETE (Datei löschen)
Rückgabe von LookupAccountName für Administratoren=0
Letzter API-Fehler=122
Länge des SIDs=16
Rückgabe von LookupAccountName für Administratoren=1
Letzter API-Fehler=997
Länge des SIDs=16
Bytes für ACL=72
Rückgabe von InitializeAcl=1
Letzter API-Fehler=997
Rückgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Rückgabe von IsValidAcl für den DACL=1
Letzter API-Fehler=997
DACL ist vorhanden!
Rückgabe von GetAclInformation=1
Letzter API-Fehler=997
Anzahl benutzter Bytes in DACL=48
Anzahl freier Bytes in DACL=0
ACEs in DACL=2
Größe des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE
Vererbung=0
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
1. ACE Bezogen auf SID=Jeder
Accessrechte des 1. ACEs=$0
Rückgabe von AddAce=1
Letzter API-Fehler=0
Rückgabe von IsValidAcl für den selbsterzeugten DACL=1
Letzter API-Fehler=0
Größe des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=0
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgeführt
2. ACE Bezogen auf SID=Jeder
Accessrechte des 2. ACEs=$1101BF
Rückgabe von AddAce=1
Letzter API-Fehler=0
Rückgabe von IsValidAcl für den selbsterzeugten DACL=1
Letzter API-Fehler=0
Bei ALLOWED_ACE...
...zu addierende Rechte=$11F01FF
Rückgabe von AddAce=1
Letzter API-Fehler=0
Rückgabe von IsValidAcl für den selbsterzeugten DACL=1
Letzter API-Fehler=0
Rückgabe von InitializeSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe von SetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Rückgabe von SetFileSecurity=1
Letzter API-Fehler=0
[/quote:cba7059298]
Rolf
 
21.05.2005  
 



Hallo Rolf...

Sieht auf den ersten Blick ganz gut aus. Hauts hin oder gibts Probleme? Stimmt das mit den Werten im Explorer uberein?
 
21.05.2005  
 




Rolf
Koch
So wie ich es auf den ersten Blick sehe, ist alles OK.
Werde aber bestimmt weitertesten. Gehe gleich aber zuerst mal auf ein IN EXTREMO Konzert hier in Koblenz *freu*

Rolf
 
21.05.2005  
 



Hab beim Spielen mit der PROC noch ein paar Fehler entdeckt.
KompilierenMarkierenSeparieren
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"
Set_ACE_IN_DACL Datei$,@$(0),"-","F_DELETE"
Get_Group_Name "Administratoren"
Set_ACE_IN_DACL Datei$,@$(0),"+","FILE_DELETE_CHILD,READ_CONTROL,ACCESS_SYSTEM_SECURITY,WRITE_OWNER,WRITE_DAC,F_DELETE,SYNCHRONIZE,FILE_WRITE_EA,FILE_READ_EA,FILE_READ_DATA,FILE_WRITE_DATA,FILE_APPEND_DATA,FILE_EXECUTE,FILE_READ_ATTRIBUTES,FILE_WRITE_ATTRIBUTES,F_DELETE"
@Editbox("API Rückgaben",1)

 
21.05.2005  
 



So?[quote:3d16bd5b50]Fehlercode IsValidSid=1
Letzter API Fehler=0
Fehlercode LookupAccountSid=1
Letzter API Fehler=997
Jeder
****PROZEDUR gestartet****
Gewaehlte Datei=Cokumente und EinstellungenPackard BellDesktopwischenablage01.bmp
Gruppenname/Username=Jeder
Zu Addierende Rechte=...
SYNCHRONIZE FILE_WRITE_EA FILE_READ_EA FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_EXECUTE FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES F_DELETE
Letzter API-Fehler=997
Raeckgabe von GetVolumeInformation=1
Letzter API-Fehler=997
Laufwerksflags=1010000000011111111
Ausgelesene Partition=NTFS
Zugriff ist einschraenkbar
Raeckgabe von GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Laenge des Security Descriptor=164
Raeckgabe von GetFileSecurity=1
Letzter API-Fehler=0
Raeckgabe von IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Raeckgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den DACL=1
Letzter API-Fehler=0
DACL ist vorhanden!
Raeckgabe von GetAclInformation=1
Letzter API-Fehler=0
Anzahl benutzter Bytes in DACL=88
Anzahl freier Bytes in DACL=0
ACEs in DACL=3
Graeße des 1.ACEs=36
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Fehlercode IsValidSid=1
Letzter API Fehler=0
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
Raeckgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Raeckgabe von LocalFree faer den String-SID=0
Letzter API-Fehler=0
String-SID des 1. ACEs=S-1-5-21-789336058-1343024091-854245398-1004
1. ACE Bezogen auf SID=Packard Bell
1. ACE Bezogen auf Domainname=C4
Accessrechte des 1. ACEs=$1F01FF
Recht im 1. ACE=FILE_ALL_ACCESS (Vollzugriff)
Graeße des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Fehlercode IsValidSid=1
Letzter API Fehler=0
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
Raeckgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Raeckgabe von LocalFree faer den String-SID=0
Letzter API-Fehler=0
String-SID des 2. ACEs=S-1-5-18
2. ACE Bezogen auf SID=SYSTEM
2. ACE Bezogen auf Domainname=NT-AUTORITÄT
Accessrechte des 2. ACEs=$1F01FF
Recht im 2. ACE=FILE_ALL_ACCESS (Vollzugriff)
Graeße des 3.ACEs=24
ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE
Fehlercode IsValidSid=1
Letzter API Fehler=0
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
Raeckgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Raeckgabe von LocalFree faer den String-SID=0
Letzter API-Fehler=0
String-SID des 3. ACEs=S-1-5-32-544
3. ACE Bezogen auf SID=Administratoren
3. ACE Bezogen auf Domainname=VORDEFINIERT
Accessrechte des 3. ACEs=$1F01FF
Recht im 3. ACE=FILE_ALL_ACCESS (Vollzugriff)
Raeckgabe von LookupAccountName faer Jeder=0
Letzter API-Fehler=122
Laenge des SIDs=12
Raeckgabe von LookupAccountName faer Jeder=1
Letzter API-Fehler=997
Laenge des SIDs=12
Bytes faer ACL=108
Raeckgabe von InitializeAcl=1
Letzter API-Fehler=997
Raeckgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Raeckgabe von IsValidAcl faer den DACL=1
Letzter API-Fehler=997
DACL ist vorhanden!
Raeckgabe von GetAclInformation=1
Letzter API-Fehler=997
Anzahl benutzter Bytes in DACL=88
Anzahl freier Bytes in DACL=0
ACEs in DACL=3
Graeße des 1.ACEs=36
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=16
Fehlercode IsValidSid=1
Letzter API Fehler=997
Raeckgabe von LookupAccountSid=0
Letzter API-Fehler=1332
Reset des API-Fehlers wird durchgefaehrt
1. ACE Bezogen auf SID=
Accessrechte des 1. ACEs=$1F01FF
Raeckgabe von AddAce an Punkt 0=0
Letzter API-Fehler=87
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=0
Letzter API-Fehler=87
Graeße des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=16
Fehlercode IsValidSid=1
Letzter API Fehler=87
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
2. ACE Bezogen auf SID=SYSTEM
Accessrechte des 2. ACEs=$1F01FF
Raeckgabe von AddAce an Punkt 1=0
Letzter API-Fehler=87
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=0
Letzter API-Fehler=87
Graeße des 3.ACEs=24
ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=16
Fehlercode IsValidSid=1
Letzter API Fehler=87
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
3. ACE Bezogen auf SID=Administratoren
Accessrechte des 3. ACEs=$1F01FF
Raeckgabe von AddAce an Punkt 2=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1
Letzter API-Fehler=0
Bei ALLOWED_ACE...
...zu addierende Rechte=$1101BF
Raeckgabe von AddAce an Punkt 3=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1
Letzter API-Fehler=0
Raeckgabe von InitializeSecurityDescriptor=1
Letzter API-Fehler=0
Raeckgabe von SetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Raeckgabe von SetFileSecurity=1
Letzter API-Fehler=0
Fehlercode IsValidSid=1
Letzter API Fehler=0
Fehlercode LookupAccountSid=1
Letzter API Fehler=997
Jeder
****PROZEDUR gestartet****
Gewaehlte Datei=Cokumente und EinstellungenPackard BellDesktopwischenablage01.bmp
Gruppenname/Username=Jeder
Zu Addierende Rechte=...
F_DELETE
Letzter API-Fehler=997
Raeckgabe von GetVolumeInformation=1
Letzter API-Fehler=997
Laufwerksflags=1010000000011111111
Ausgelesene Partition=NTFS
Zugriff ist einschraenkbar
Raeckgabe von GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Laenge des Security Descriptor=184
Raeckgabe von GetFileSecurity=1
Letzter API-Fehler=0
Raeckgabe von IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Raeckgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den DACL=1
Letzter API-Fehler=0
DACL ist vorhanden!
Raeckgabe von GetAclInformation=1
Letzter API-Fehler=0
Anzahl benutzter Bytes in DACL=52
Anzahl freier Bytes in DACL=56
ACEs in DACL=2
Graeße des 1.ACEs=24
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Fehlercode IsValidSid=1
Letzter API Fehler=0
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
Raeckgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Raeckgabe von LocalFree faer den String-SID=0
Letzter API-Fehler=0
String-SID des 1. ACEs=S-1-5-32-544
1. ACE Bezogen auf SID=Administratoren
1. ACE Bezogen auf Domainname=VORDEFINIERT
Accessrechte des 1. ACEs=$1F01FF
Recht im 1. ACE=FILE_ALL_ACCESS (Vollzugriff)
Graeße des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Fehlercode IsValidSid=1
Letzter API Fehler=0
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
Raeckgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Raeckgabe von LocalFree faer den String-SID=0
Letzter API-Fehler=0
String-SID des 2. ACEs=S-1-1-0
2. ACE Bezogen auf SID=Jeder
2. ACE Bezogen auf Domainname=
Accessrechte des 2. ACEs=$1101BF
Recht im 2. ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen)
Recht im 2. ACE=FILE_WRITE_DATA (Erlaubt Daten zu Scheiben)
Recht im 2. ACE=FILE_APPEND_DATA (Erlaubt Daten anzuhaengen)
Recht im 2. ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen)
Recht im 2. ACE=FILE_WRITE_EA (Erlaubt erweiterte Attribute zu schreiben)
Recht im 2. ACE=FILE_EXECUTE (Erlaubt eine Datei auszufaehren)
Recht im 2. ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute)
Recht im 2. ACE=FILE_WRITE_ATTRIBUTES (aendern der Fileattribute)
Recht im 2. ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten)
Recht im 2. ACE=_DELETE (Datei laeschen)
Raeckgabe von LookupAccountName faer Jeder=0
Letzter API-Fehler=122
Laenge des SIDs=12
Raeckgabe von LookupAccountName faer Jeder=1
Letzter API-Fehler=997
Laenge des SIDs=12
Bytes faer ACL=72
Raeckgabe von InitializeAcl=1
Letzter API-Fehler=997
Raeckgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Raeckgabe von IsValidAcl faer den DACL=1
Letzter API-Fehler=997
DACL ist vorhanden!
Raeckgabe von GetAclInformation=1
Letzter API-Fehler=997
Anzahl benutzter Bytes in DACL=52
Anzahl freier Bytes in DACL=56
ACEs in DACL=2
Graeße des 1.ACEs=24
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=16
Fehlercode IsValidSid=1
Letzter API Fehler=997
Raeckgabe von LookupAccountSid=0
Letzter API-Fehler=1332
Reset des API-Fehlers wird durchgefaehrt
1. ACE Bezogen auf SID=
Accessrechte des 1. ACEs=$1F01FF
Raeckgabe von AddAce an Punkt 1=0
Letzter API-Fehler=87
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=0
Letzter API-Fehler=87
Graeße des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=0
Fehlercode IsValidSid=1
Letzter API Fehler=87
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
2. ACE Bezogen auf SID=Jeder
Accessrechte des 2. ACEs=$1101BF
Bei ALLOWED_ACE zu addierende Rechte=$1001BF
Raeckgabe von AddAce an Punkt 2=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1
Letzter API-Fehler=0
Bei DENIED_ACE...
...zu addierende Rechte=$10000
Raeckgabe von AddAce an Punkt 0=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1
Letzter API-Fehler=0
Raeckgabe von InitializeSecurityDescriptor=1
Letzter API-Fehler=0
Raeckgabe von SetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Raeckgabe von SetFileSecurity=1
Letzter API-Fehler=0
Fehlercode IsValidSid=1
Letzter API Fehler=0
Fehlercode LookupAccountSid=1
Letzter API Fehler=997
Administratoren
****PROZEDUR gestartet****
Gewaehlte Datei=Cokumente und EinstellungenPackard BellDesktopwischenablage01.bmp
Gruppenname/Username=Administratoren
Zu Addierende Rechte=...
FILE_DELETE_CHILD,READ_CONTROL,ACCESS_SYSTEM_SECURITY,WRITE_OWNER,WRITE_DAC,F_DELETE,SYNCHRONIZE,FILE_WRITE_EA,FILE_READ_EA,FILE_READ_DATA,FILE_WRITE_DATA,FILE_APPEND_DATA,FILE_EXECUTE,FILE_READ_ATTRIBUTES,FILE_WRITE_ATTRIBUTES,F_DELETE
Letzter API-Fehler=997
Raeckgabe von GetVolumeInformation=1
Letzter API-Fehler=997
Laufwerksflags=1010000000011111111
Ausgelesene Partition=NTFS
Zugriff ist einschraenkbar
Raeckgabe von GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Laenge des Security Descriptor=148
Raeckgabe von GetFileSecurity=1
Letzter API-Fehler=0
Raeckgabe von IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Raeckgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den DACL=1
Letzter API-Fehler=0
DACL ist vorhanden!
Raeckgabe von GetAclInformation=1
Letzter API-Fehler=0
Anzahl benutzter Bytes in DACL=48
Anzahl freier Bytes in DACL=24
ACEs in DACL=2
Graeße des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE
Fehlercode IsValidSid=1
Letzter API Fehler=0
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
Raeckgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Raeckgabe von LocalFree faer den String-SID=0
Letzter API-Fehler=0
String-SID des 1. ACEs=S-1-1-0
1. ACE Bezogen auf SID=Jeder
1. ACE Bezogen auf Domainname=
Accessrechte des 1. ACEs=$10000
Recht im 1. ACE=_DELETE (Datei laeschen)
Graeße des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Fehlercode IsValidSid=1
Letzter API Fehler=0
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
Raeckgabe von ConvertSidToStringSid=1
Letzter API-Fehler=0
Raeckgabe von LocalFree faer den String-SID=0
Letzter API-Fehler=0
String-SID des 2. ACEs=S-1-1-0
2. ACE Bezogen auf SID=Jeder
2. ACE Bezogen auf Domainname=
Accessrechte des 2. ACEs=$1001BF
Recht im 2. ACE=FILE_READ_DATA (Erlaubt Daten aus einem File zu lesen)
Recht im 2. ACE=FILE_WRITE_DATA (Erlaubt Daten zu Scheiben)
Recht im 2. ACE=FILE_APPEND_DATA (Erlaubt Daten anzuhaengen)
Recht im 2. ACE=FILE_READ_EA (Erlaubt erweiterte Attibute zu lesen)
Recht im 2. ACE=FILE_WRITE_EA (Erlaubt erweiterte Attribute zu schreiben)
Recht im 2. ACE=FILE_EXECUTE (Erlaubt eine Datei auszufaehren)
Recht im 2. ACE=FILE_READ_ATTRIBUTES (Lesen der Fileattribute)
Recht im 2. ACE=FILE_WRITE_ATTRIBUTES (aendern der Fileattribute)
Recht im 2. ACE=SYNCHRONIZE (Erlaubt einem FileHandle auf ein Complitition I/O zu warten)
Raeckgabe von LookupAccountName faer Administratoren=0
Letzter API-Fehler=122
Laenge des SIDs=16
Raeckgabe von LookupAccountName faer Administratoren=1
Letzter API-Fehler=997
Laenge des SIDs=16
Bytes faer ACL=72
Raeckgabe von InitializeAcl=1
Letzter API-Fehler=997
Raeckgabe von GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Raeckgabe von IsValidAcl faer den DACL=1
Letzter API-Fehler=997
DACL ist vorhanden!
Raeckgabe von GetAclInformation=1
Letzter API-Fehler=997
Anzahl benutzter Bytes in DACL=48
Anzahl freier Bytes in DACL=24
ACEs in DACL=2
Graeße des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE
Vererbung=0
Fehlercode IsValidSid=1
Letzter API Fehler=997
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
1. ACE Bezogen auf SID=Jeder
Accessrechte des 1. ACEs=$10000
Raeckgabe von AddAce an Punkt 0=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1
Letzter API-Fehler=0
Graeße des 2.ACEs=20
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Vererbung=0
Fehlercode IsValidSid=1
Letzter API Fehler=0
Raeckgabe von LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers wird durchgefaehrt
2. ACE Bezogen auf SID=Jeder
Accessrechte des 2. ACEs=$1001BF
Raeckgabe von AddAce an Punkt 1=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1
Letzter API-Fehler=0
Bei ALLOWED_ACE...
...zu addierende Rechte=$11F01FF
Raeckgabe von AddAce an Punkt 2=1
Letzter API-Fehler=0
Raeckgabe von IsValidAcl faer den selbsterzeugten DACL=1
Letzter API-Fehler=0
Raeckgabe von InitializeSecurityDescriptor=1
Letzter API-Fehler=0
Raeckgabe von SetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Raeckgabe von SetFileSecurity=1
Letzter API-Fehler=0[/quote:3d16bd5b50]Salve.
 
21.05.2005  
 



Hallo IF...

Füge der Datei bitte mal über den WindowsExplorer 2 weitere ACLs hinzu.
Als driien Aufruf füge dann mal deinen Usernamen ein und lasse die volle Rechte geben (wie bei Andreas).
Starte dann noch einmal die Prozedur...
Wenn du dann die ACLS im Windows Explorer betrachtest - wurden sie richtig gesetzt???
 
21.05.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

2.437 Betrachtungen

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

Themeninformationen

Dieses Thema hat 4 Teilnehmer:

unbekannt (10x)
iF (5x)
Rolf Koch (2x)
CB (1x)


Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie