Deutsch
Forum

DIE DATEI GEHÖRT MIR!

 
- Seite 1 -


Hallo Profaner...

Ich habe vor, mich demnächst mal etwas mäher mit der NT/NTFS File-Security zu beschäftigen - anzeigen und ändern von Eigentümern und son Zeug zum Beispiel. Hat jemand so etwas schon mal gemacht (mit Security Descriptors gearbeitet) oder gibt es Interesse an dem Thema?
 
11.04.2005  
 



 
- Seite 2 -


Au verflixt! Hast Recht! Das ganze sollte ja auch in eine Editbox:
KompilierenMarkierenSeparieren
Windowstyle 31
Windowtitle "File Security"
Window 0,0-640,440
DEF @GetFileSecurity(5) !"ADVAPI32","GetFileSecurityA"
DEF @GetLastError(0) !"KERNEL32","GetLastError"
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"
Declare Filename$,Fehler&,SECURITY_INFORMATION#,PSECURITY_DESCRIPTOR#,Needed#
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
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
    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
    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())
    STRING Privileg#,0="SeSecurityPrivilege"
    LET Fehler&=@LookupPrivilegeValue(System$,Privileg#,LUID#)
    ADDSTRING "Rückgabe von LookupPrivilegeValue="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Byte NewState#,4=@Byte(Luid#,0)
    Byte NewState#,5=@Byte(Luid#,1)
    Byte NewState#,6=@Byte(Luid#,2)
    Byte NewState#,7=@Byte(Luid#,3)
    Byte NewState#,8=@Byte(Luid#,4)
    Byte NewState#,9=@Byte(Luid#,5)
    Byte NewState#,10=@Byte(Luid#,6)
    Byte NewState#,11=@Byte(Luid#,7)
    Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
    ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    DIM SECURITY_INFORMATION#,4
    DIM PSECURITY_DESCRIPTOR#,1024
    DIM Needed#,4
    LONG SECURITY_INFORMATION#,0=$1 | $2 | $4
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),SECURITY_INFORMATION#,PSECURITY_DESCRIPTOR#,1024,Needed#)
    ADDSTRING "Rückgabe von GetFileSecurity="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    @CloseHandle(@LONG(Token#,0))
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose SECURITY_INFORMATION#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#
    @Editbox("API Rückgaben",1)

Endif

While 0=0

    Waitinput

Wend

 
23.04.2005  
 




CB
Habe mal meine selbsterstellte DLL gewählt:
KompilierenMarkierenSeparieren
und dasselbe bei einer Systemdatei:
KompilierenMarkierenSeparieren
Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
23.04.2005  
 



Hier ein source der das result ins clipboard schreibt.
KompilierenMarkierenSeparieren
declare i&
Windowstyle 31
Windowtitle "File Security"
Window 0,0-640,440
DEF @GetFileSecurity(5) !"ADVAPI32","GetFileSecurityA"
DEF @GetLastError(0) !"KERNEL32","GetLastError"
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"
Declare Filename$,Fehler&,SECURITY_INFORMATION#,PSECURITY_DESCRIPTOR#,Needed#
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
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
    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
    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())
    STRING Privileg#,0="SeSecurityPrivilege"
    LET Fehler&=@LookupPrivilegeValue(System$,Privileg#,LUID#)
    ADDSTRING "Rückgabe von LookupPrivilegeValue="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Byte NewState#,4=@Byte(Luid#,0)
    Byte NewState#,5=@Byte(Luid#,1)
    Byte NewState#,6=@Byte(Luid#,2)
    Byte NewState#,7=@Byte(Luid#,3)
    Byte NewState#,8=@Byte(Luid#,4)
    Byte NewState#,9=@Byte(Luid#,5)
    Byte NewState#,10=@Byte(Luid#,6)
    Byte NewState#,11=@Byte(Luid#,7)
    Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
    ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    DIM SECURITY_INFORMATION#,4
    DIM PSECURITY_DESCRIPTOR#,1024
    DIM Needed#,4
    LONG SECURITY_INFORMATION#,0=$1 | $2 | $4
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),SECURITY_INFORMATION#,PSECURITY_DESCRIPTOR#,1024,Needed#)
    ADDSTRING "Rückgabe von GetFileSecurity="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    @CloseHandle(@LONG(Token#,0))
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose SECURITY_INFORMATION#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#
    clearclip
    for i&:=0 to %getcount do begin;putclip listboxitem$(i&)+"
    ";end

Endif


Eigene Files:
[quote:b411ece2f4]Gewählte Datei=c:winxpsystem32cmd.exe
Letzter API-Fehler=0
Rückgabe von GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1010000000011111111
Zugriff ist einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe von OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe von LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe von AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe von GetFileSecurity=1
Letzter API-Fehler=0[/quote:b411ece2f4]
[quote:b411ece2f4]Gewählte Datei=c:autorun.inf
Letzter API-Fehler=0
Rückgabe von GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1010000000011111111
Zugriff ist einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe von OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe von LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe von AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe von GetFileSecurity=1
Letzter API-Fehler=0
[/quote:b411ece2f4]
[quote:b411ece2f4]
Gewählte Datei=Cokumente und EinstellungenPackard BellNTUSER.DAT
Letzter API-Fehler=0
Rückgabe von GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1010000000011111111
Zugriff ist einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe von OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe von LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe von AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe von GetFileSecurity=1
Letzter API-Fehler=0
[/quote:b411ece2f4]
Datei von Gast:
[quote:b411ece2f4]Gewählte Datei=Cokumente und EinstellungenGuestDesktopsetup Project V1.1.exe
Letzter API-Fehler=0
Rückgabe von GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1010000000011111111
Zugriff ist einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe von OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe von LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe von AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe von GetFileSecurity=1
Letzter API-Fehler=0
[/quote:b411ece2f4]
Salve.
 
23.04.2005  
 



So ein verdammter Mist! Die gleiche Sch... wie bei der LSA API - überall wird 1 zurückgegeben - im Endeffekt passiert aber gar nichts Erfolgreiches!

Ich habe mich schon gewundert, warum es die IsValid... Funktionen gibt - jetzt ists klar.
Es hakt noch bei GetSecurityDescriptorOwner, den Security Descriptor scheine ich zu haben - bin mir aber auch da nicht sicher, ob der alle Informationen enthält.
Ich werde heute Nacht mal schauen, ob ich noch alleine den Durchblick bekomme, ansonsten werde ich den Code mit dem sichtbar gemachten Problem mal poste. Vielleicht hat da ja noch jemand eine Idee - machmal liegts nur an Kleinigkeiten...
 
23.04.2005  
 



OK, ich habs - hier schon mal wieder was zum Testen.

In der WIN32.HLP scheint da ein Fehler vorzuliegen:
Der zweite Parameter von GetFileSecurity ist da als Struktur angegeben - ist in Wirklichkeit aber nur ein einfacher Flag.
KompilierenMarkierenSeparieren
Windowstyle 31
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 @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
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&
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
    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
    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(System$,Privileg#,LUID#)
    ADDSTRING "Rückgabe von LookupPrivilegeValue="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Byte NewState#,4=@Byte(Luid#,0)
    Byte NewState#,5=@Byte(Luid#,1)
    Byte NewState#,6=@Byte(Luid#,2)
    Byte NewState#,7=@Byte(Luid#,3)
    Byte NewState#,8=@Byte(Luid#,4)
    Byte NewState#,9=@Byte(Luid#,5)
    Byte NewState#,10=@Byte(Luid#,6)
    Byte NewState#,11=@Byte(Luid#,7)
    Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
    ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    DIM Needed#,4
    Clear Needed#
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),$1 | $2 | $4,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&)
    DIM PSECURITY_DESCRIPTOR#,Needed&
    Clear PSECURITY_DESCRIPTOR#
    @SetLastError(0)
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),$1 | $2 | $4,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#,4
    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="+@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 "Domainname="+@String$(Domain#,0)
    ADDSTRING "Besitzer der Datei="+@String$(ACCOUNT_NAME#,0)
    LET FEHLER&=@CloseHandle(@LONG(Token#,0))
    ADDSTRING "Rückgabe von CloseHandle="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    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#
    @Editbox("API Rückgaben",1)

Endif

While 0=0

    Waitinput

Wend


Was ich etwas merkwürdig finde, ist folgendes:
Ich habe weltweit nicht einen einzigen Quelltext gefunden, der das Privileg SeSecurityPrivilege aktiviert - damit das Ding aber überhaupt läuft, ist dies unbedingt notwendig!

Jetzt gehts mit der primären Gruppe weiter. Dann brauche unbedingt Rückmeldungen von XP und NT, in der Art wie sie IF gepostet hat.

Bislang ist noch alles Kinderkram - fast zum Schluss wirds dann mit den ACLs aber Hart and Heavy. Das Setzen der Werte wird dann leichteste werden.
 
24.04.2005  
 




CB
[quote:4948bb6540]Gewählte Datei=DROFANXPROFAN 9XPSE.exe
Letzter API-Fehler=0
Rückgabe von GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1110000000011111111
Zugriff ist einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe von OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe von LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe von AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe von GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Länge des Security Descriptor=104
Rückgabe von GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe von IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe von GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe von IsValidSid=1
Letzter API-Fehler=0
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Domainname=MMC3
Besitzer der Datei=CB
Rückgabe von CloseHandle=1
Letzter API-Fehler=997[/quote:4948bb6540]
 
XProfan 8/9.1, Win XP, AMD 64/3200
24.04.2005  
 



Hallo Christian...

Besten! Klappt also wunderbar auf XP. Morgen gehts mit Gruppen weiter.


PS: Bei dieser Praxis von Microsoft dort Fehlermeldungen auszugeben, ist es kein Wunder, daß sich niemand an die Security herantraut.
Desweiteren würde mich noch brennend interessieren, ob die 997 Klamotten durch Profan hervorgerufen werden. Kann das mal jemand mit Profan2Cpp compilieren?
 
24.04.2005  
 




CB
Profan2cpp meldet: Zeile 68: String direkt an externe Funktion übergeben
KompilierenMarkierenSeparieren
Clear Privileg#
Clear LUID#
STRING Privileg#,0="SeSecurityPrivilege"
==>  LET Fehler&=@LookupPrivilegeValue(System$,Privileg#,LUID#)
ADDSTRING "Rückgabe von LookupPrivilegeValue="+@STR$(Fehler&)
ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())

String LUID#,0 = ?

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



Hallo Christian...

Da habe ich im Eifer des Gefechtes vergessen die Adresse einzufügen.
So dürfte das passen:
KompilierenMarkierenSeparieren
Windowstyle 31
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 @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
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&
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
    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
    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="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Byte NewState#,4=@Byte(Luid#,0)
    Byte NewState#,5=@Byte(Luid#,1)
    Byte NewState#,6=@Byte(Luid#,2)
    Byte NewState#,7=@Byte(Luid#,3)
    Byte NewState#,8=@Byte(Luid#,4)
    Byte NewState#,9=@Byte(Luid#,5)
    Byte NewState#,10=@Byte(Luid#,6)
    Byte NewState#,11=@Byte(Luid#,7)
    Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
    ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    DIM Needed#,4
    Clear Needed#
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),$1 | $2 | $4,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&)
    DIM PSECURITY_DESCRIPTOR#,Needed&
    Clear PSECURITY_DESCRIPTOR#
    @SetLastError(0)
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),$1 | $2 | $4,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#,4
    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="+@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 "Domainname="+@String$(Domain#,0)
    ADDSTRING "Besitzer der Datei="+@String$(ACCOUNT_NAME#,0)
    LET FEHLER&=@CloseHandle(@LONG(Token#,0))
    ADDSTRING "Rückgabe von CloseHandle="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    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#
    @Editbox("API Rückgaben",1)

Endif

While 0=0

    Waitinput

Wend

 
24.04.2005  
 




CB
[quote:70baefedd8]Gewählte Datei=C:WINDOWSexplorer.exe
Letzter API-Fehler=0
Rückgabe von GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1110000000011111111
Zugriff ist einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe von OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe von LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe von AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe von GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Länge des Security Descriptor=148
Rückgabe von GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe von IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe von GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe von IsValidSid=1
Letzter API-Fehler=0
Rückgabe von LookupAccountSid=1
Letzter API-Fehler=997
Domainname=VORDEFINIERT
Besitzer der Datei=Administratoren
Rückgabe von CloseHandle=1
Letzter API-Fehler=997[/quote:70baefedd8]
Profan2cpp meldet keinen Fehler mehr - weiter komme ich mangels C++ Compilers leider nicht.

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



Besten Dank schon mal...

Hoffentlich compiliert mir das noch jemand nach C++ - ich habe die Befürchtung, daß es da noch einen Profanbug gibt...
 
24.04.2005  
 



Die primäre Gruppe scheint bei dieser Geschichte keine Rolle zu spielen. Hier der Quelltext dazu:
KompilierenMarkierenSeparieren
Windowstyle 31
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 @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
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&
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
    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
    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="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Byte NewState#,4=@Byte(Luid#,0)
    Byte NewState#,5=@Byte(Luid#,1)
    Byte NewState#,6=@Byte(Luid#,2)
    Byte NewState#,7=@Byte(Luid#,3)
    Byte NewState#,8=@Byte(Luid#,4)
    Byte NewState#,9=@Byte(Luid#,5)
    Byte NewState#,10=@Byte(Luid#,6)
    Byte NewState#,11=@Byte(Luid#,7)
    Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
    ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    DIM Needed#,4
    Clear Needed#
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),$1 | $2 | $4 | $8,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&)
    DIM PSECURITY_DESCRIPTOR#,Needed&
    Clear PSECURITY_DESCRIPTOR#
    @SetLastError(0)
    LET Fehler&=@GetFileSecurity(@ADDR(Filename$),$1 | $2 | $4,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#,4
    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 "Domainname="+@String$(Domain#,0)
    ADDSTRING "Besitzer der Datei="+@String$(ACCOUNT_NAME#,0)
    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 "Domainname="+@String$(Domain#,0)
    ADDSTRING "Primäre Gruppe der Datei="+@String$(ACCOUNT_NAME#,0)
    LET FEHLER&=@CloseHandle(@LONG(Token#,0))
    ADDSTRING "Rückgabe von CloseHandle="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    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#
    @Editbox("API Rückgaben",1)

Endif

While 0=0

    Waitinput

Wend


Jetzt noch mal tief durchatmen und heute Nacht gehts dann mit dem ACL weiter.
War bislang einfacher als gedacht, aber ohne PrivAktivate hätte ich allein an den Privilegien Tage zugebracht.
 
24.04.2005  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

5.634 Betrachtungen

Unbenanntvor 0 min.
JR04.11.2014
Tommy30.01.2014
Andreas Koch05.09.2013
Stephie03.09.2011

Themeninformationen



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

Ein Projekt aller XProfaner, die es gibt!


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

Datenschutz


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

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

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


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie