Español
Stammtisch & Café

GetSecurityDescriptorDACL.

 


Descripción:

GetSecurityDescriptorDACL ermittelt una Zeiger en el Zugriffsliste (DACL) uno Objektes. Diese Liste son a, welchen Usern y welchen Gruppen welche Zugriffe erlaubt oder verboten son. Diese Función hay sólo bajo NT-basierten Windowssystemen.
El Zugriffsliste besteht de:
Dem ACL Encabezamiento =>
Byte 0 = 2 (Revision Level des ACL)
Byte 1: = 0 (a Anpassung a 16 Bit)
Byte 2-3 = Größe des ACL en Bytes
Byte 4-5 = Anzahl el Eintrage (ACEs) en el ACL
Byte 6-7 = 0 (a Anpassung a 32 Bit)
Danach folgt una geordnete Auflistung el ACEs. Dabei voluntad ACEs, el el Zugriff verweigern, antes ACEs gelistet, el el Zugriff erlauben.




Deklaration:

DEF @GetSecurityDescriptorDACL(4) !ADVAPI32,GetSecurityDescriptorDacl




Parámetro:

1.Parámetro: Bereichsvariable con el SECURITY_DESCRIPTOR Struktur, de el uno el DACL obtener voluntad.
2.Parámetro: 4 Byte Bereichsvariable, el una Flag aufnimmt, el angibt si una DACL festgelegt wurde. =>
- $1 = DACL es disponible y Parámetro 3 y 4 enthalten gültige Werte.
- $0 = Es kein DACL disponible.
3.Parámetro: 4 Byte Bereichsvariable, el el Adresse des DACLs aufnimmt.
4.Parámetro: 4 Byte Bereichsvariable, el una Valor aufnimmt, el angibt si el DACL por una Default Mechanismus producido wurde. =>
- 0 = sí
- <>0 = nein



Rückgabewert:

1 en Erfolg, 0 en Fehler.


Beispiele:

KompilierenMarcaSeparación
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#
    Disponer STRSID#
    Disponer P_STRSID#
    @Editbox("API Rückgaben",1)

Endif

Sinestar encargado %MENUITEM=-2

    Waitinput

Wend


[keywords:8dc275058b]
DACL discretionary access-control list Liste ACL Zugriff Gruppen Benutzer User erlauben verbieten abierto lesen escribir löschen Atributos auslesen Access Zugriffe Zugriffsliste
[/keywords:8dc275058b]
 
23.05.2005  
 



Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

1.897 Views

Untitledvor 0 min.

Themeninformationen

Dieses Thema ha 1 subscriber:

unbekannt (1x)


Admins  |  AGB  |  Applications  |  Autores  |  Chat  |  Política de Privacidad  |  Descargar  |  Entrance  |  Ayuda  |  Merchantportal  |  Pie de imprenta  |  Mart  |  Interfaces  |  SDK  |  Services  |  Juegos  |  Búsqueda  |  Support

Ein Projekt aller XProfan, el lo son!


Mi XProfan
Privado Noticias
Eigenes Ablageforum
Temas-Merkliste
Eigene Beiträge
Eigene Temas
Zwischenablage
Cancelar
 Deutsch English Français Español Italia
Traducciones

Política de Privacidad


Wir uso Cookies sólo como Session-Cookies wegen el technischen Notwendigkeit y en uns hay no Cookies de Drittanbietern.

Wenn du hier en unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung de Informationen en unseren Cookies en XProfan.Net a.

Weitere Informationen a unseren Cookies y dazu, como du el Kontrolle darüber behältst, findest du en unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Yo möchte no Cookie