Français
Stammtisch & le café

GetSecurityDescriptorDACL.

 


Beschreibung:

GetSecurityDescriptorDACL ermittelt une aiguille sur qui Zugriffsliste (DACL) eines Objektes. cet liste gibt à, welchen Usern et welchen Gruppen quelle Zugriffe erlaubt ou bien interdit sommes. cet Funktion gibt es seulement sous NT-basierten Windowssystemen.
qui Zugriffsliste besteht aus:
Dem ACL En-tête =>
Byte 0 = 2 (Revision Level des ACL)
Byte 1: = 0 (zur Anpassung à 16 Bit)
Byte 2-3 = Taille des ACL dans Bytes
Byte 4-5 = Nombre de Eintrage (ACEs) im ACL
Byte 6-7 = 0 (zur Anpassung à 32 Bit)
après folgt une geordnete Auflistung qui ACEs. Dabei volonté ACEs, qui den Zugriff verweigern, avant ACEs gelistet, qui den Zugriff erlauben.




Deklaration:

DEF @GetSecurityDescriptorDACL(4) !ADVAPI32,GetSecurityDescriptorDacl




paramètre:

1.paramètre: Bereichsvariable avec qui SECURITY_DESCRIPTOR Struktur, aus qui on den DACL conservé veux.
2.paramètre: 4 Byte Bereichsvariable, qui une Flag aufnimmt, qui angibt si un DACL festgelegt wurde. =>
- $1 = DACL ist vorhanden et paramètre 3 et 4 enthalten gültige Werte.
- $0 = c'est ne...aucune DACL vorhanden.
3.paramètre: 4 Byte Bereichsvariable, qui qui Adresse des DACLs aufnimmt.
4.paramètre: 4 Byte Bereichsvariable, qui une Wert aufnimmt, qui angibt si qui DACL par une Default Mechanismus erzeugt wurde. =>
- 0 = oui
- <>0 = non



Rückgabewert:

1 chez Erfolg, 0 chez faute.


Beispiele:

KompilierenMarqueSéparation
Windowstyle 31+512
Windowtitle "File Security"
Window 0,0-640,440
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"
Declare Filename$,Fehler&,PSECURITY_DESCRIPTOR#,Needed#,Needed&
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
DEclare SID#,GFLAG#
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare Test&
Declare ACL_PRESENT#,P_ACL#,ACL_D#
Declare ACL_INFO#,Zähler&,ACE#,P_ACE#,ACE_SIZE&,STRSID#,P_STRSID#
Declare SID2#,IO%,ADDR_NEWSTATE&,PrivCheckBox&,Start&,SecFlag&,ACCESS_MASK&
LET PrivCheckBox&=@CreateCheckBox(%HWND,"Zugriff auf SACL und Eigentümer ermöglichen!",10,200,350,30)
LET Start&=@CreateButton(%HWND,"Programm starten",10,250,200,30)

Whilenot @Getfocus(Start&)

    Waitinput
    CASE %MENUITEM=-2 : end

WEND

EnableWindow PrivCheckBox&,0
EnableWindow Start&,0
LET Filename$=@LOADFILE$("Datei laden","Alle Dateien |*.*|Textdateien|*.TXT")

IF Filename$<>""

    CLEARLIST
    LET LAUFWERK$=@LEFT$(Filename$,3)
    DIM Label#,256
    DIM LFLAGS#,4
    DIM DAT#,256
    DIM STRSID#,256
    DIM P_STRSID#,4
    ADDSTRING "Gewählte Datei="+Filename$
    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))

    IF @LONG(LFLAGS#,0) | $8 = @LONG(LFLAGS#,0)

        ADDSTRING "Zugriff ist einschränkbar"

    else

        ADDSTRING "Zugriff ist nicht einschränkbar"

    endif

    ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
    dim token#,4
    DIM NewState#,16
    DIM Luid#,8
    DIM Privileg#,33
    ADDSTRING "Windowsversion="+$WINVER

    IF @Getcheck(PrivCheckBox&)

        ADDSTRING "Privilegien werden gesetzt!"
        Long NewState#,0=1 Nur ein Privileg soll geändert werden
        Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
        LET FEHLER&=@OpenProcessToken(@GetCurrentProcess(),$0020 | $0008,Token#)
        ADDSTRING "Rückgabe von OpenProcessToken="+@STR$(Fehler&)
        ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
        Clear Privileg#
        Clear LUID#
        STRING Privileg#,0="SeSecurityPrivilege"
        LET Fehler&=@LookupPrivilegeValue(@addr(System$),Privileg#,LUID#)
        ADDSTRING "Rückgabe von LookupPrivilegeValue für SeSecurityPrivilege="+@STR$(Fehler&)
        ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
        ADDSTRING "Reset des API-Fehlers wird durchgeführt"
        @SetLastError(0)
        LET IO%=%IORESULT
        LET ADDR_NEWSTATE&=NewState#
        LET ADDR_NEWSTATE&=ADDR_NEWSTATE&+4
        @CopyMemory(ADDR_NEWSTATE&,Luid#,8)
        ADDSTRING "Letzter API-Fehler nach CopyMemory="+@STR$(@GetLastError())
        Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
        ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
        ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
        Clear NewState#
        Long NewState#,0=1 Nur ein Privileg soll geändert werden
        Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
        Clear Privileg#
        Clear LUID#
        STRING Privileg#,0="SeTakeOwnershipPrivilege"
        LET Fehler&=@LookupPrivilegeValue(@addr(System$),Privileg#,LUID#)
        ADDSTRING "Rückgabe von LookupPrivilegeValue fur SeTakeOwnershipPrivilege="+@STR$(Fehler&)
        ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
        ADDSTRING "Reset des API-Fehlers wird durchgeführt"
        @SetLastError(0)
        LET IO%=%IORESULT
        LET ADDR_NEWSTATE&=NewState#
        LET ADDR_NEWSTATE&=ADDR_NEWSTATE&+4
        @CopyMemory(ADDR_NEWSTATE&,Luid#,8)
        ADDSTRING "Letzter API-Fehler nach CopyMemory="+@STR$(@GetLastError())
        Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
        ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
        ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
        ADDSTRING "Reset des API-Fehlers wird durchgeführt"
        @SetLastError(0)
        LET IO%=%IORESULT

    else

        ADDSTRING "Privilegien werden nicht!"

    endif

    DIM Needed#,4
    Clear Needed#

    IF @Getcheck(PrivCheckbox&)

        LET SECFLAG&=$1 | $2 | $4 | $8

    else

        LET SECFLAG&=$1 | $2 | $4

    endif

    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 SID#,4
    DIM GFlag#,2
    Clear SID#
    Clear GFLAG#
    LET FEHLER&=@GetSecurityDescriptorOwner(PSECURITY_DESCRIPTOR#,SID#,GFLAG#)
    ADDSTRING "Rückgabe von GetSecurityDescriptorOwner="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    LET Fehler&=@IsValidSid(@long(SID#,0))
    ADDSTRING "Rückgabe von IsValidSid für den Besitzer="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    DIM ACCOUNT_NAME#,256
    DIM SIZE_ACCOUNT#,4
    DIM Domain#,256
    DIM SIZE_DOMAIN#,4
    DIM SID_NAME_USE#,4
    Clear SID_NAME_USE#
    Clear ACCOUNT_NAME#
    Clear Domain#
    Long SIZE_ACCOUNT#,0=255
    LONG SIZE_DOMAIN#,0=255
    LET FEHLER&=@LookupAccountSid(@ADDR(System$),@Long(SID#,0),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
    ADDSTRING "Domainname="+@String$(Domain#,0)
    ADDSTRING "Besitzer der Datei="+@String$(ACCOUNT_NAME#,0)
    Clear STRSID#

    IF @VAL(@LEFT$($WINVER,3))>=5.0

        LET FEHLER&=@ConvertSidToStringSid(@Long(SID#,0),P_STRSID#)
        @CopyMemory(STRSID#,@LONG(P_STRSID#,0),255)
        ADDSTRING "String-SID des Besitzers="+@STRING$(STRSID#,0)
        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())

    endif

    Clear SID_NAME_USE#
    Clear ACCOUNT_NAME#
    Clear Domain#
    Clear SID#
    Clear GFLAG#
    LET FEHLER&=@GetSecurityDescriptorGroup(PSECURITY_DESCRIPTOR#,SID#,GFLAG#)
    ADDSTRING "Rückgabe von GetSecurityDescriptorGroup="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    LET Fehler&=@IsValidSid(@long(SID#,0))
    ADDSTRING "Rückgabe von IsValidSid für die primäre Gruppe="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Long SIZE_ACCOUNT#,0=255
    LONG SIZE_DOMAIN#,0=255
    LET FEHLER&=@LookupAccountSid(@ADDR(System$),@Long(SID#,0),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
    ADDSTRING "Domainname="+@String$(Domain#,0)
    ADDSTRING "Primäre Gruppe der Datei="+@String$(ACCOUNT_NAME#,0)
    DIM ACL_PRESENT#,4
    DIM P_ACL#,4
    DIM ACL_D#,4
    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 @AND(Fehler&=1,@LONG(ACL_PRESENT#,0)=1)

        DIM ACL_INFO#,12
        DIM P_ACE#,4
        CLEAR ACL_INFO#
        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

        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)
                ADDSTRING "Größe des "+@STR$(@INT(Zähler&+1))+".ACEs="+@STR$(@Word(ACE#,2))

                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

                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&)
                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)
                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 @or(ACCESS_MASK&,$1F01FF)=ACCESS_MASK&

                    ADDSTRING "Recht im "+@STR$(@int(Zähler&+1))+". ACE=FILE_ALL_ACCESS"
                    LET ACCESS_MASK&=ACCESS_MASK&-$1F01FF

                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

        Dispose P_ACE#
        Dispose ACL_INFO#

    Endif

    IF @Getcheck(PrivCheckbox&)

        Clear ACL_PRESENT#,P_ACL#,ACL_D#
        Let Fehler&=@GetSecurityDescriptorSacl(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
        ADDSTRING "Rückgabe von GetSecurityDescriptorSacl="+@STR$(Fehler&)
        ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
        LET Fehler&=@IsValidAcl(@long(P_ACL#,0))
        ADDSTRING "Rückgabe von IsValidAcl für den SACL="+@STR$(Fehler&)
        ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())

        IF @LONG(ACL_PRESENT#,0)=1

            ADDSTRING "SACL ist vorhanden!"

        else

            ADDSTRING "SACL ist nicht vorhanden!"

        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 SACL="+@STR$(@LONG(ACL_INFO#,4))
            ADDSTRING "Anzahl freier Bytes in SACL="+@STR$(@LONG(ACL_INFO#,8))
            ADDSTRING "ACEs in SACL="+@STR$(@LONG(ACL_INFO#,0))
            LET Zähler&=0

            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)
                    ADDSTRING "Größe des "+@STR$(@INT(Zähler&+1))+".ACEs="+@STR$(@Word(ACE#,2))

                    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

                    IF @or(@BYTE(ACE#,1),$40)=@BYTE(ACE#,1)

                        ADDSTRING @STR$(@INT(Zähler&+1))+".ACE zeichnet erfolgreiche Zugriffe auf."

                    Elseif @or(@BYTE(ACE#,1),$80)=@BYTE(ACE#,1)

                        ADDSTRING @STR$(@INT(Zähler&+1))+".ACE zeichnet fehlgeschlagene Zugriffe auf."

                    endif

                    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&)
                    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)
                    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

            Dispose ACL_INFO#
            Dispose P_ACE#

        Endif

    endif

    IF @Getcheck(PrivCheckbox&)

        LET FEHLER&=@CloseHandle(@LONG(Token#,0))
        ADDSTRING "Rückgabe von CloseHandle="+@STR$(Fehler&)
        ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())

    endif

    Dispose ACL_D#
    Dispose P_ACL#
    Dispose ACL_PRESENT#
    Dispose SID_NAME_USE#
    Dispose ACCOUNT_NAME#
    Dispose SIZE_ACCOUNT#
    Dispose Domain#
    Dispose SIZE_DOMAIN#
    Dispose SID#
    Dispose GFLAG#
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#
    Dispose STRSID#
    Dispose P_STRSID#
    @Editbox("API Rückgaben",1)

Endif

Whilenot %MENUITEM=-2

    Waitinput

Wend


[keywords:8dc275058b]
DACL discretionary access-control list liste ACL Zugriff Gruppen Benutzer User erlauben prohiber ouvrir lesen écrivons effacer Attribute auslesen Access Zugriffe Zugriffsliste
[/keywords:8dc275058b]
 
23.05.2005  
 



répondre


Topictitle, max. 100 marque.
 

Systemprofile:

ne...aucune Systemprofil angelegt. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

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

Options du sujet

1.863 Views

Untitledvor 0 min.

Themeninformationen

cet Thema hat 1 participant:

unbekannt (1x)


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

un projet aller XProfaner, qui il y a!


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

protection des données


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

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

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


d'accordDatenschutzerklärung
je voudrais keinen Cookie