English
Forum

HANDS AWAY of my Key!

 
Moin any zusammmen...

Längst not everyone User has Access to any Registryschlüssel - too this is at create of Programs To deliberating. intimate means someone hereon, that one User with eingeschränkten Rechten ditto any Keys under HKEY_LOCAL_MACHINE read can, could it there evtl. on sand built having.
I Have time a small View source to that play written:
CompileMarkSeparation
 $H WINDOWS.PH
Windowstyle 31+512
Windowtitle Registry Security
Window 0,0-640,440
DEF @RegCloseKey(1) !ADVAPI32,RegCloseKey
DEF @RegOpenKeyEx(5) !ADVAPI32,RegOpenKeyExA
DEF @RegGetKeySecurity(4) !ADVAPI32,RegGetKeySecurity
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 Fehler&,PSECURITY_DESCRIPTOR#,Needed#,Needed&
Declare NewState#,token#,Privileg#,Luid#,System$
DEclare SID#,GFLAG#
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare Test&,RegHandle#,Key$,RegHandle&
Declare ACL_PRESENT#,P_ACL#,ACL_D#,Oberschlüssel&
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 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
DIM RegHandle#,4
Clear RegHandle#
LET Oberschlüssel&=~HKEY_LOCAL_MACHINE
LET KEY$=SoftwareMicrosoftWindows NTCurrentVersionProfileList
ADDSTRING Windowsversion=+$WINVER

IF @Getcheck(PrivCheckBox&)

    dim token#,4
    DIM NewState#,16
    DIM Luid#,8
    DIM Privileg#,33
    ADDSTRING Rückgabe von RegOpenKeyEx=+@STR$(Fehler&)
    ADDSTRING Letzter API-Fehler=+@STR$(@GetLastError())
    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())
    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())
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    LET SECFLAG&=$1 | $2 | $4 | $8
    LET FEHLER&=@RegOpenKeyEx($80000002,@ADDR(KEY$),0,$F003F | $1000000,RegHandle#)

else

    ADDSTRING Privilegien werden nicht gesetzt!
    LET FEHLER&=@RegOpenKeyEx($80000002,@ADDR(KEY$),0,$F003F,RegHandle#)
    ADDSTRING Rückgabe von RegOpenKeyEx=+@STR$(Fehler&)
    ADDSTRING Letzter API-Fehler=+@STR$(@GetLastError())
    LET SECFLAG&=$1 | $2 | $4

endif

Let Reghandle&=@LONG(RegHandle#,0)

IF @AND(RegHandle&<>0,Fehler&=0)

    ADDSTRING Handle des abzufragenden Oberschlüssels=+@HEX$(Oberschlüssel&)
    ADDSTRING Abzufragender Schlüssel=+KEY$
    DIM Needed#,4
    DIM PSECURITY_DESCRIPTOR#,2048
    Long Needed#,0=2048
    LET Fehler&=@RegGetKeySecurity(RegHandle&,SecFlag&,0,Needed#)
    ADDSTRING Rückgabe von RegGetKeySecurity=+@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
    Dispose PSECURITY_DESCRIPTOR#
    DIM PSECURITY_DESCRIPTOR#,Needed&
    Clear PSECURITY_DESCRIPTOR#
    @SetLastError(0)
    LET Fehler&=@RegGetKeySecurity(RegHandle&,SECFLAG&,PSECURITY_DESCRIPTOR#,Needed#)
    ADDSTRING Rückgabe von RegGetKeySecurity=+@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 P_STRSID#,4
    DIM ACCOUNT_NAME#,256
    DIM SIZE_ACCOUNT#,4
    DIM Domain#,256
    DIM SIZE_DOMAIN#,4
    DIM SID_NAME_USE#,4
    DIM STRSID#,256
    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=KEY_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=KEY_QUERY_VALUE (Erlaubt Daten aus einem Schlüssel 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=KEY_SET_VALUE (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=KEY_CREATE_SUB_KEY (Erlaubt Unterschlüssel zu erstellen)
                    LET ACCESS_MASK&=ACCESS_MASK&-$4

                endif

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

                    ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=KEY_ENUMERATE_SUB_KEYS (Erlaubt Unterschlüssel zu listen 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=KEY_NOTIFY
                    LET ACCESS_MASK&=ACCESS_MASK&-$10

                endif

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

                    ADDSTRING Recht im +@STR$(@int(Zähler&+1))+. ACE=KEY_CREATE_LINK (Erlaubt symbolischen Link zu erstellen)
                    LET ACCESS_MASK&=ACCESS_MASK&-$20

                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 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=KEY_DELETE_CHILD (Erlaubt einen Unterschlüssel 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 (Key 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=KEY_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 token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose STRSID#
    Dispose P_STRSID#
    LET FEHLER&=@RegCloseKey(REGHANDLE&)
    ADDSTRING Rückgabe von RegCloseKey=+@STR$(Fehler&)
    ADDSTRING Letzter API-Fehler=+@STR$(@GetLastError())

Endif

@./../Function-References/XProfan/editbox/'>Editbox(API Rückgaben,1)
Dispose RegHandle#

Whilenot %MENUITEM=-2

    Waitinput

Wend


which ask have I:
- I work in the rule only with windows95/98. gives it on NT/2000/XP any Systemprogramme, The these rights in the Registry List?
- gives it yet More Registryrechte as The, The I in View source to charge let? Reine Kombinationsflags time except...
- becomes with irgendeinem Registryschlüssel somewhere one SACL displayed?
- has someone ask to that View source?
 
05/31/05  
 



Answer


Topictitle, max. 100 characters.
 

Systemprofile:

no Systemprofil laid out. [anlegen]

XProfan:

 Posting  Font  Smilies  ▼ 

Please register circa a Posting To verfassen.
 

Topic-Options

765 Views

Untitledvor 0 min.
Helmut07/17/18

Themeninformationen

this Topic has 1 subscriber:

unbekannt (1x)


Admins  |  AGB  |  Applications  |  Authors  |  Chat  |  Privacy Policy  |  Download  |  Entrance  |  Help  |  Merchantportal  |  Imprint  |  Mart  |  Interfaces  |  SDK  |  Services  |  Games  |  Search  |  Support

One proposition all XProfan, The there's!


My XProfan
Private Messages
Own Storage Forum
Topics-Remember-List
Own Posts
Own Topics
Clipboard
Log off
 Deutsch English Français Español Italia
Translations

Privacy Policy


we use Cookies only as Session-Cookies because of the technical necessity and with us there no Cookies of Drittanbietern.

If you here on our Website click or navigate, stimmst You ours registration of Information in our Cookies on XProfan.Net To.

further Information To our Cookies and moreover, How You The control above keep, find You in ours nachfolgenden Datenschutzerklärung.


all rightDatenschutzerklärung
i want none Cookie