Español
Fuente/ Codesnippets

Auslesen Token Zugriffsrechte

 
Folgender Code wirft una Blick en el Zugriffsrechte uno Token:
KompilierenMarcaSeparación
Windowstyle 31+512
Windowtitle Token Security
Window 0,0-640,440
DEF @GetKernelObjectSecurity(5) !ADVAPI32,GetKernelObjectSecurity
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#,Privileg#,Luid#,System$
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&,Token&
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
CLEARLIST
DIM STRSID#,256
DIM P_STRSID#,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(),$20 | $0008,@addr(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(Token&,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 für 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(Token&,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
    LET SECFLAG&=$1 | $2 | $4 | $8
    LET FEHLER&=@CloseHandle(Token&)
    ADDSTRING Rückgabe von CloseHandle=+@STR$(Fehler&)
    ADDSTRING Letzter API-Fehler=+@STR$(@GetLastError())

else

    ADDSTRING Privilegien werden nicht gesetzt!
    LET SECFLAG&=$1 | $2 | $4

endif

LET FEHLER&=@OpenProcessToken(@GetCurrentProcess(),$20000,@ADDR(Token&))
ADDSTRING Rückgabe von OpenProcessToken=+@STR$(Fehler&)
ADDSTRING Letzter API-Fehler=+@STR$(@GetLastError())
DIM Needed#,4
Clear Needed#
LET Fehler&=@GetKernelObjectSecurity(Token&,SecFlag&,0,0,Needed#)
ADDSTRING Rückgabe von GetKernelObjectSecurity=+@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&=@GetKernelObjectSecurity(Token&,SECFLAG&,PSECURITY_DESCRIPTOR#,NEEDED&,Needed#)
ADDSTRING Rückgabe von GetKernelObjectSecurity=+@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 des Tokens=+@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&,$1)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=TOKEN_ASSIGN_PRIMARY (Primären Token einem Prozess zuordnen)
                LET ACCESS_MASK&=ACCESS_MASK&-$1

            endif

            IF @or(ACCESS_MASK&,$2)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=TOKEN_DUPLICATE (Token dublizieren)
                LET ACCESS_MASK&=ACCESS_MASK&-$2

            endif

            IF @or(ACCESS_MASK&,$4)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=TOKEN_IMPERSONATE (Impersonation Token einem Prozess zuordnen)
                LET ACCESS_MASK&=ACCESS_MASK&-$4

            endif

            IF @or(ACCESS_MASK&,$8)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=TOKEN_QUERY (Inhalte eines Token abfragen)
                LET ACCESS_MASK&=ACCESS_MASK&-$8

            endif

            IF @or(ACCESS_MASK&,$10)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=TOKEN_QUERY_SOURCE (Quelle des Tokens abfragen)
                LET ACCESS_MASK&=ACCESS_MASK&-$10

            endif

            IF @or(ACCESS_MASK&,$20)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=TOKEN_ADJUST_PRIVILEGES (Privilegien aktivieren / deaktivieren)
                LET ACCESS_MASK&=ACCESS_MASK&-$20

            endif

            IF @or(ACCESS_MASK&,$80)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=TOKEN_ADJUST_DEFAULT (Default ACL setzen)
                LET ACCESS_MASK&=ACCESS_MASK&-$80

            endif

            IF @or(ACCESS_MASK&,$100)=ACCESS_MASK&

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

            endif

            IF @or(ACCESS_MASK&,$40000)=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&,$20000)=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&,$100000)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=SYNCHRONIZE (Erlaubt einem Handle 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=TOKEN_ADJUST_GROUPS (Gruppen im Token ändern)
                LET ACCESS_MASK&=ACCESS_MASK&-$40

            endif

            IF @or(ACCESS_MASK&,$1000000)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=ACCESS_SYSTEM_SECURITY (Zugriff auf den SACL)
                LET ACCESS_MASK&=ACCESS_MASK&-$1000000

            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&,$10000)=ACCESS_MASK&

                ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=_DELETE (löschen)
                LET ACCESS_MASK&=ACCESS_MASK&-$10000

            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

LET FEHLER&=@CloseHandle(Token&)
ADDSTRING Rückgabe von CloseHandle=+@STR$(Fehler&)
ADDSTRING Letzter API-Fehler=+@STR$(@GetLastError())
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 Needed#
Dispose PSECURITY_DESCRIPTOR#
Dispose STRSID#
Disponer P_STRSID#
@Editbox(API Rückgaben,1)

Sinestar encargado %MENUITEM=-2

    Waitinput

Wend

 
13.06.2005  
 



Zum Quelltext


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

2.646 Views

Untitledvor 0 min.
Ralf Netz15.05.2013

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