Español
Foro

DIE DATEI GEHÖRT MIR!

 
- Página 1 -


¡Hola Profaner...

Yo habe antes, mich demnächst veces algo mäher con el NT/NTFS File-Security a beschäftigen - Mostrar y ändern de Eigentümern y son Zeug para Ejemplo. Sombrero alguien así algo ya veces gemacht (con Security Descriptors gearbeitet) oder hay Interesse a el Thema?
 
11.04.2005  
 



 
- Página 3 -



CB
¡Hola Andreas!

Habs ya veces durchlaufen dejar.
[quote:dbd502c749]Gewählte Datei=C:WINDOWSWEBInstall.ocx
Letzter API-Fehler=0
Rückgabe de GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1110000000011111111
Zugriff es einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe de OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Longitud des Security Descriptor=212
Rückgabe de GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe de IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el Besitzer=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=MMC3
Besitzer el Datei=CB
Rückgabe de GetSecurityDescriptorGroup=1
Letzter API-Fehler=997
Rückgabe de IsValidSid para el primäre Gruppe=1
Letzter API-Fehler=997
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=MMC3
Primäre Gruppe el Datei=Kein
Rückgabe de CloseHandle=1
Letzter API-Fehler=997[/quote:dbd502c749]
Christian
 
XProfan 8/9.1, Win XP, AMD 64/3200
24.04.2005  
 



Damit el otro mejor el folgen puede qué hier passiert, voluntad Yo ahora veces anhand uno Datenbankanwendung zusammenfassen:

Problema:
Wenn una Administrator una (Profano) Anwendung en una NTFS-Festplatte installiert, puede evtl. User con eingeschränkten Rechten dieses Programa no ausführen, como ellos no Zugriff en el Datenbankdateien haben.
Das ha el Grund, daß el Sicherheitseinstellungen el Expediente (Security Descriptor) en el Regel de los übergeordneten Verzeichnissen übernommen voluntad.

Fazit:
Das Carta vernünftiger Firmensoftware es sin el Zugriff en el Security Descriptor no posible.

Lösungsansatz:
Wir versuchen el Daten des Security Descriptors uno NTFS-Expediente auszulesen, en Infos en Formatierung dieser Daten a obtener. Ein Cambio es entonces später en dazugehörigen APIs muy ligeramente posible.

Vorarbeiten:
Como en fast allen Systemeinstellungen necesario auch hier el zugehörigen Privilegien des aufrufenden Prozessses aktiviert voluntad, a Daten auslesen a puede (siehe PrivAktivate en el Downloadbereich). Zum Auslesen es el hier antes allem el Privileg SeSecurityPrivilege.

Como weit son wir:
Privilegien fueron erfolgreich aktiviert y Besitzer uno Expediente wurde ausgelesen y es así auch änderbar (auch dazu muss entonces später aber todavía evtl. una Privileg aktiviert voluntad). Yo denke, daß auch el Auslesen el primären Gruppe funktioniert.
 
24.04.2005  
 



Voila...

So, ahora muss Yo wohl sólo una vez qué erklären - si el cada ya wissen debería, erschlagt mich Por favor, no igual:

Der DACL legt fest, welche User y Gruppen welche Zugriffsrechte en el Expediente haben. Beim Zugriff en el Expediente muss el User quasi angeben, qué él con el Expediente antes ha (access rights). Sind esta Zugriffsrechte no para el entsprechenden User disponible, son el Sistema el Zugriff el Handle no frei (siehe auch API CreateFile).
El individual User son con ihren erlaubten oder verbotenen Zugriffsrechten en sogenannten ACEs innerhalb el DACL gespeichert. => Ist extremo vereinfacht!

Hier el Quellcode - Yo brauche para el Test una Expediente con möglichst unterschiedlichen Einschränkungen para möglichst viele User y Gruppen - al besten mehrere Archivos:
KompilierenMarcaSeparación
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 @GetSecurityDescriptorDACL(4) !"ADVAPI32","GetSecurityDescriptorDacl"
DEF @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
DEF @IsValidAcl(1) !"ADVAPI32","IsValidAcl"
DEF @GetAclInformation(4) !"ADVAPI32","GetAclInformation"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @GetAce(3) !"ADVAPI32","GetAce"
DEF @ConvertSidToStringSid(2) !"ADVAPI32","ConvertSidToStringSidA"
DEF @LocalFree(1) !"KERNEL32","LocalFree"
Declare Filename$,Fehler&,PSECURITY_DESCRIPTOR#,Needed#,Needed&
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
DEclare SID#,GFLAG#
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare Test&
Declare DACL_PRESENT#,P_ACL#,DACL_D#
Declare ACL_INFO#,Zähler&,ACE#,P_ACE#,ACE_SIZE&,STRSID#,P_STRSID#
Declare SID2#
LET Filename$=@LOADFILE$("Datei laden","Alle Dateien |*.*|Textdateien|*.TXT")

IF Filename$<>""

    CLEARLIST
    LET LAUFWERK$=@LEFT$(Filename$,3)
    DIM Label#,256
    DIM LFLAGS#,4
    DIM DAT#,256
    DIM STRSID#,256
    DIM P_STRSID#,4
    ADDSTRING "Gewählte Datei="+Filename$
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    LET FEHLER&=@GetVolumeInformation(@ADDR(Laufwerk$),Label#,256,0,0,LFlags#,DAT#,256)
    ADDSTRING "Rückgabe von GetVolumeInformation="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    ADDSTRING "Laufwerksflags="+@BIN$(@LONG(LFLAGS#,0))

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

        ADDSTRING "Zugriff ist einschränkbar"

    else

        ADDSTRING "Zugriff ist nicht einschränkbar"

    endif

    ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
    dim token#,4
    DIM NewState#,16
    DIM Luid#,8
    DIM Privileg#,33
    ADDSTRING "Windowsversion="+$WINVER
    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 STRSID#
    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())
    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)
    DIM DACL_PRESENT#,1
    DIM P_ACL#,4
    DIM DACL_D#,4
    Let Fehler&=@GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,DACL_PRESENT#,P_ACL#,DACL_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())
    DIM ACL_INFO#,12
    DIM P_ACE#,4
    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 "ACEs in ACL="+@STR$(@LONG(ACL_INFO#,0))
    LET Zähler&=0

    While Zähler&<@LONG(ACL_INFO#,0)

        Let Fehler&=@GetAce(@long(P_ACL#,0),Zähler&,P_ACE#)
        DIM ACE#,4
        @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 @STR$(Zähler&)+". ACE Bezogen auf SID="+@String$(ACCOUNT_NAME#,0)
        ADDSTRING @STR$(Zähler&)+". ACE Bezogen auf Domainname="+@String$(Domain#,0)
        ADDSTRING "Accessrechte des "+@STR$(Zähler&)+". ACEs=$"+@HEX$(@LONG(ACE#,4))
        LET Zähler&=Zähler&+1
        Dispose SID2#
        Dispose ACE#

    wend

    LET FEHLER&=@CloseHandle(@LONG(Token#,0))
    ADDSTRING "Rückgabe von CloseHandle="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Dispose P_ACE#
    Dispose ACL_INFO#
    Dispose DACL_D#
    Dispose P_ACL#
    Dispose DACL_PRESENT#
    Dispose SID_NAME_USE#
    Dispose ACCOUNT_NAME#
    Dispose SIZE_ACCOUNT#
    Dispose Domain#
    Dispose SIZE_DOMAIN#
    Dispose SID#
    Dispose GFLAG#
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#
    Dispose STRSID#
    Dispose P_STRSID#
    @Editbox("API Rückgaben",1)

Endif

Mientras que 0=0

    Waitinput

Wend


Hier todavía el Testergebnisse:
[box:8db057e781]
Gewählte Datei=H:TestTest 2.doc
Letzter API-Fehler=0
Rückgabe de GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1110000000011111111
Zugriff es einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.0
Rückgabe de OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Longitud des Security Descriptor=176
Rückgabe de GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe de IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el Besitzer=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=ANDREAS-N4WTRUA
Besitzer el Datei=Andreas
String-SID des Besitzers=S-1-5-21-602162358-2111687655-1202660629-1000
Rückgabe de ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe de LocalFree para el String-SID=0
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorGroup=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el primäre Gruppe=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=ANDREAS-N4WTRUA
Primäre Gruppe el Datei=Kein
Rückgabe de GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Rückgabe de IsValidAcl para el DACL=1
Letzter API-Fehler=997
Rückgabe de GetAclInformation=1
Letzter API-Fehler=997
ACEs en ACL=4
Größe des 1.ACEs=24
ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
0. ACE Bezogen en SID=Hauptbenutzer
0. ACE Bezogen en Domainname=VORDEFINIERT
Accessrechte des 0. ACEs=$200A9
Größe des 2.ACEs=24
ACE Typ des 2.ACEs=ACCESS_DENIED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
1. ACE Bezogen en SID=Hauptbenutzer
1. ACE Bezogen en Domainname=VORDEFINIERT
Accessrechte des 1. ACEs=$F00E9
Größe des 3.ACEs=24
ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
2. ACE Bezogen en SID=Administratoren
2. ACE Bezogen en Domainname=VORDEFINIERT
Accessrechte des 2. ACEs=$1F01FF
Größe des 4.ACEs=20
ACE Typ des 4.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
3. ACE Bezogen en SID=Jeder
3. ACE Bezogen en Domainname=
Accessrechte des 3. ACEs=$120089
Rückgabe de CloseHandle=1
Letzter API-Fehler=997
[/box:8db057e781]
[box:8db057e781]
Gewählte Datei=H:TestTest.doc
Letzter API-Fehler=0
Rückgabe de GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1110000000011111111
Zugriff es einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.0
Rückgabe de OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Longitud des Security Descriptor=104
Rückgabe de GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe de IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el Besitzer=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=ANDREAS-N4WTRUA
Besitzer el Datei=Andreas
String-SID des Besitzers=S-1-5-21-602162358-2111687655-1202660629-1000
Rückgabe de ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe de LocalFree para el String-SID=0
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorGroup=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el primäre Gruppe=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=ANDREAS-N4WTRUA
Primäre Gruppe el Datei=Kein
Rückgabe de GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Rückgabe de IsValidAcl para el DACL=1
Letzter API-Fehler=997
Rückgabe de GetAclInformation=1
Letzter API-Fehler=997
ACEs en ACL=1
Größe des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
0. ACE Bezogen en SID=Jeder
0. ACE Bezogen en Domainname=
Accessrechte des 0. ACEs=$1F01FF
Rückgabe de CloseHandle=1
Letzter API-Fehler=997
[/box:8db057e781]
Und otra vez veces es hier en el pequeño XProfan Foro una Quellcode mehr, a el se ya así mancher Programmierende el Kopf eingeschlagen ha.

Neben el Testen Yo ahora ni Cuestión:
Yo muss para Cambio des ACLs irgendwie a el Namen oder SIDs el en el Sistema vorhandenen User y Gruppen kommen. Sombrero alguien una Concepto, cómo hacerlo al elegantesten regelt?
 
25.04.2005  
 




CB
¡Hola Andreas!
Paar interessante Resultate:

1. XP en mi privaten PC:
[quote:1dbcf84ece]Gewählte Datei=C:NTLDR
Letzter API-Fehler=0
Rückgabe de GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1110000000011111111
Zugriff es einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe de OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Longitud des Security Descriptor=80
Rückgabe de GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe de IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el Besitzer=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=VORDEFINIERT
Besitzer el Datei=Administratoren
String-SID des Besitzers=S-1-5-32-544
Rückgabe de ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe de LocalFree para el String-SID=0
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorGroup=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el primäre Gruppe=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=VORDEFINIERT
Primäre Gruppe el Datei=Administratoren
Rückgabe de GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Rückgabe de IsValidAcl para el DACL=1
Letzter API-Fehler=997
Rückgabe de GetAclInformation=1
Letzter API-Fehler=997
ACEs en ACL=1
Größe des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
0. ACE Bezogen en SID=Jeder
0. ACE Bezogen en Domainname=
Accessrechte des 0. ACEs=$1F01FF
Rückgabe de CloseHandle=1
Letzter API-Fehler=997
[/quote:1dbcf84ece]
2. NT:
siehe .jpg

3. XP Pro en Firmen-PC con sólo Benutzerrechten:
Línea 83: Bereichsvariable es no DIMensioniert.

4. schicke Usted unos pocos Auszüge de meiner Reg por PM - es einiges Interessante para Usted drin

Christian

10 kB
Hochgeladen:25.04.2005
Ladeanzahl34
Descargar
 
XProfan 8/9.1, Win XP, AMD 64/3200
25.04.2005  
 



¡Hola Christian...

Zu Nr.1: Sieht doch bien de, oder?

Zu Nr.2: Diese API hay bajo NT wohl todavía no - es aber para el, qué wir vorhaben, auch no nötig.

ZU Nr.3: Yo habe vergessen, antes Verwendung algunos Bereichsvariablen a clearen. In el Security rächt se el bastante böse!

a Nr.4: Bitte una Screenshot, sí?

Corrección (hoffentlich läufts):
KompilierenMarcaSeparación
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 @GetSecurityDescriptorDACL(4) !"ADVAPI32","GetSecurityDescriptorDacl"
DEF @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
DEF @IsValidAcl(1) !"ADVAPI32","IsValidAcl"
DEF @GetAclInformation(4) !"ADVAPI32","GetAclInformation"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @GetAce(3) !"ADVAPI32","GetAce"
DEF @ConvertSidToStringSid(2) !"ADVAPI32","ConvertSidToStringSidA"
DEF @LocalFree(1) !"KERNEL32","LocalFree"
Declare Filename$,Fehler&,PSECURITY_DESCRIPTOR#,Needed#,Needed&
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
DEclare SID#,GFLAG#
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare Test&
Declare DACL_PRESENT#,P_ACL#,DACL_D#
Declare ACL_INFO#,Zähler&,ACE#,P_ACE#,ACE_SIZE&,STRSID#,P_STRSID#
Declare SID2#
LET Filename$=@LOADFILE$("Datei laden","Alle Dateien |*.*|Textdateien|*.TXT")

IF Filename$<>""

    CLEARLIST
    LET LAUFWERK$=@LEFT$(Filename$,3)
    DIM Label#,256
    DIM LFLAGS#,4
    DIM DAT#,256
    DIM STRSID#,256
    DIM P_STRSID#,4
    ADDSTRING "Gewählte Datei="+Filename$
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    LET FEHLER&=@GetVolumeInformation(@ADDR(Laufwerk$),Label#,256,0,0,LFlags#,DAT#,256)
    ADDSTRING "Rückgabe von GetVolumeInformation="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    ADDSTRING "Laufwerksflags="+@BIN$(@LONG(LFLAGS#,0))

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

        ADDSTRING "Zugriff ist einschränkbar"

    else

        ADDSTRING "Zugriff ist nicht einschränkbar"

    endif

    ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
    dim token#,4
    DIM NewState#,16
    DIM Luid#,8
    DIM Privileg#,33
    ADDSTRING "Windowsversion="+$WINVER
    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 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())

    endif

    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())
    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)
    DIM DACL_PRESENT#,1
    DIM P_ACL#,4
    DIM DACL_D#,4
    Let Fehler&=@GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,DACL_PRESENT#,P_ACL#,DACL_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())
    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 "ACEs in ACL="+@STR$(@LONG(ACL_INFO#,0))
    LET Zähler&=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
        @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 @STR$(Zähler&)+". ACE Bezogen auf SID="+@String$(ACCOUNT_NAME#,0)
        ADDSTRING @STR$(Zähler&)+". ACE Bezogen auf Domainname="+@String$(Domain#,0)
        ADDSTRING "Accessrechte des "+@STR$(Zähler&)+". ACEs=$"+@HEX$(@LONG(ACE#,4))
        LET Zähler&=Zähler&+1
        Dispose SID2#
        Dispose ACE#

    wend

    LET FEHLER&=@CloseHandle(@LONG(Token#,0))
    ADDSTRING "Rückgabe von CloseHandle="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Dispose P_ACE#
    Dispose ACL_INFO#
    Dispose DACL_D#
    Dispose P_ACL#
    Dispose DACL_PRESENT#
    Dispose SID_NAME_USE#
    Dispose ACCOUNT_NAME#
    Dispose SIZE_ACCOUNT#
    Dispose Domain#
    Dispose SIZE_DOMAIN#
    Dispose SID#
    Dispose GFLAG#
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#
    Dispose STRSID#
    Dispose P_STRSID#
    @Editbox("API Rückgaben",1)

Endif

Mientras que 0=0

    Waitinput

Wend

 
25.04.2005  
 




CB
¡Hola Andreas!
Sieht tatsächlich bastante bien de!

Nächster Test:
XP privat:
[quote:ddf59fc77f]Gewählte Datei=C:WINDOWSegedit.exe
Letzter API-Fehler=0
Rückgabe de GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1110000000011111111
Zugriff es einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe de OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue=1
Letzter API-Fehler=997
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Longitud des Security Descriptor=80
Rückgabe de GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe de IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el Besitzer=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=VORDEFINIERT
Besitzer el Datei=Administratoren
String-SID des Besitzers=S-1-5-32-544
Rückgabe de ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe de LocalFree para el String-SID=0
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorGroup=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el primäre Gruppe=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Domainname=VORDEFINIERT
Primäre Gruppe el Datei=Administratoren
Rückgabe de GetSecurityDescriptorDacl=1
Letzter API-Fehler=997
Rückgabe de IsValidAcl para el DACL=1
Letzter API-Fehler=997
Rückgabe de GetAclInformation=1
Letzter API-Fehler=997
ACEs en ACL=1
Größe des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
0. ACE Bezogen en SID=Jeder
0. ACE Bezogen en Domainname=
Accessrechte des 0. ACEs=$1F01FF
Rückgabe de CloseHandle=1
Letzter API-Fehler=997
[/quote:ddf59fc77f]
NT: (funzt ahora)
[quote:ddf59fc77f]Gewählte Datei=C:WINNTegedit.exe
Letzter API-Fehler=0
Rückgabe de GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=11111
Zugriff es einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=4.0
Rückgabe de OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue=1
Letzter API-Fehler=0
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Longitud des Security Descriptor=176
Rückgabe de GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe de IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el Besitzer=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=0
Domainname=VORDEFINIERT
Besitzer el Datei=Administratoren
Rückgabe de LocalFree para el String-SID=0
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorGroup=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el primäre Gruppe=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=0
Domainname=NT-AUTORITÄT
Primäre Gruppe el Datei=SYSTEM
Rückgabe de GetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Rückgabe de IsValidAcl para el DACL=1
Letzter API-Fehler=0
Rückgabe de GetAclInformation=1
Letzter API-Fehler=0
ACEs en ACL=2
Größe des 1.ACEs=24
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=0
0. ACE Bezogen en SID=Jeder
0. ACE Bezogen en Domainname=
Accessrechte des 0. ACEs=$1F01FF
Größe des 2.ACEs=36
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=0
1. ACE Bezogen en SID=cb
1. ACE Bezogen en Domainname=GEV021PC01
Accessrechte des 1. ACEs=$1F01FF
Rückgabe de CloseHandle=1
Letzter API-Fehler=0
[/quote:ddf59fc77f]
Aber XP en mi Firmen-PC meldet siempre todavía: Bereichsvariable en Línea 83 no dimensioniert.

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



Neuer Intento:
KompilierenMarcaSeparación
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 @GetSecurityDescriptorDACL(4) !"ADVAPI32","GetSecurityDescriptorDacl"
DEF @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
DEF @IsValidAcl(1) !"ADVAPI32","IsValidAcl"
DEF @GetAclInformation(4) !"ADVAPI32","GetAclInformation"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @GetAce(3) !"ADVAPI32","GetAce"
DEF @ConvertSidToStringSid(2) !"ADVAPI32","ConvertSidToStringSidA"
DEF @LocalFree(1) !"KERNEL32","LocalFree"
Declare Filename$,Fehler&,PSECURITY_DESCRIPTOR#,Needed#,Needed&
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
DEclare SID#,GFLAG#
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare Test&
Declare DACL_PRESENT#,P_ACL#,DACL_D#
Declare ACL_INFO#,Zähler&,ACE#,P_ACE#,ACE_SIZE&,STRSID#,P_STRSID#
Declare SID2#
LET Filename$=@LOADFILE$("Datei laden","Alle Dateien |*.*|Textdateien|*.TXT")

IF Filename$<>""

    CLEARLIST
    LET LAUFWERK$=@LEFT$(Filename$,3)
    DIM Label#,256
    DIM LFLAGS#,4
    DIM DAT#,256
    DIM STRSID#,256
    DIM P_STRSID#,4
    ADDSTRING "Gewählte Datei="+Filename$
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    LET FEHLER&=@GetVolumeInformation(@ADDR(Laufwerk$),Label#,256,0,0,LFlags#,DAT#,256)
    ADDSTRING "Rückgabe von GetVolumeInformation="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    ADDSTRING "Laufwerksflags="+@BIN$(@LONG(LFLAGS#,0))

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

        ADDSTRING "Zugriff ist einschränkbar"

    else

        ADDSTRING "Zugriff ist nicht einschränkbar"

    endif

    ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
    dim token#,4
    DIM NewState#,16
    DIM Luid#,8
    DIM Privileg#,33
    ADDSTRING "Windowsversion="+$WINVER
    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 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())

    endif

    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())
    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)
    DIM DACL_PRESENT#,1
    DIM P_ACL#,4
    DIM DACL_D#,4
    Let Fehler&=@GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,DACL_PRESENT#,P_ACL#,DACL_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())
    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 "ACEs in ACL="+@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 @STR$(Zähler&)+". ACE Bezogen auf SID="+@String$(ACCOUNT_NAME#,0)
            ADDSTRING @STR$(Zähler&)+". ACE Bezogen auf Domainname="+@String$(Domain#,0)
            ADDSTRING "Accessrechte des "+@STR$(Zähler&)+". ACEs=$"+@HEX$(@LONG(ACE#,4))
            LET Zähler&=Zähler&+1
            Dispose SID2#
            Dispose ACE#

        wend

    Endif

    LET FEHLER&=@CloseHandle(@LONG(Token#,0))
    ADDSTRING "Rückgabe von CloseHandle="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Dispose P_ACE#
    Dispose ACL_INFO#
    Dispose DACL_D#
    Dispose P_ACL#
    Dispose DACL_PRESENT#
    Dispose SID_NAME_USE#
    Dispose ACCOUNT_NAME#
    Dispose SIZE_ACCOUNT#
    Dispose Domain#
    Dispose SIZE_DOMAIN#
    Dispose SID#
    Dispose GFLAG#
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#
    Dispose STRSID#
    Dispose P_STRSID#
    @Editbox("API Rückgaben",1)

Endif

Mientras que 0=0

    Waitinput

Wend


Ohne ACL Es el Bucle unnütz...
 
25.04.2005  
 




CB
1. Priv. PC y
2. NT: völlig identische Resultate
3. Unserem Firmen-PC fehlt todavía siempre una DIM en Línea 83 ...

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



OK, todavía qué gefunde:
KompilierenMarcaSeparación
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 @GetSecurityDescriptorDACL(4) !"ADVAPI32","GetSecurityDescriptorDacl"
DEF @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
DEF @IsValidAcl(1) !"ADVAPI32","IsValidAcl"
DEF @GetAclInformation(4) !"ADVAPI32","GetAclInformation"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @GetAce(3) !"ADVAPI32","GetAce"
DEF @ConvertSidToStringSid(2) !"ADVAPI32","ConvertSidToStringSidA"
DEF @LocalFree(1) !"KERNEL32","LocalFree"
Declare Filename$,Fehler&,PSECURITY_DESCRIPTOR#,Needed#,Needed&
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
DEclare SID#,GFLAG#
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare Test&
Declare DACL_PRESENT#,P_ACL#,DACL_D#
Declare ACL_INFO#,Zähler&,ACE#,P_ACE#,ACE_SIZE&,STRSID#,P_STRSID#
Declare SID2#
LET Filename$=@LOADFILE$("Datei laden","Alle Dateien |*.*|Textdateien|*.TXT")

IF Filename$<>""

    CLEARLIST
    LET LAUFWERK$=@LEFT$(Filename$,3)
    DIM Label#,256
    DIM LFLAGS#,4
    DIM DAT#,256
    DIM STRSID#,256
    DIM P_STRSID#,4
    ADDSTRING "Gewählte Datei="+Filename$
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    LET FEHLER&=@GetVolumeInformation(@ADDR(Laufwerk$),Label#,256,0,0,LFlags#,DAT#,256)
    ADDSTRING "Rückgabe von GetVolumeInformation="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    ADDSTRING "Laufwerksflags="+@BIN$(@LONG(LFLAGS#,0))

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

        ADDSTRING "Zugriff ist einschränkbar"

    else

        ADDSTRING "Zugriff ist nicht einschränkbar"

    endif

    ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
    dim token#,4
    DIM NewState#,16
    DIM Luid#,8
    DIM Privileg#,33
    ADDSTRING "Windowsversion="+$WINVER
    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 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())

    endif

    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())
    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)
    DIM DACL_PRESENT#,1
    DIM P_ACL#,4
    DIM DACL_D#,4
    Let Fehler&=@GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,DACL_PRESENT#,P_ACL#,DACL_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 Fehler&=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 "ACEs in ACL="+@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 @STR$(Zähler&)+". ACE Bezogen auf SID="+@String$(ACCOUNT_NAME#,0)
                ADDSTRING @STR$(Zähler&)+". ACE Bezogen auf Domainname="+@String$(Domain#,0)
                ADDSTRING "Accessrechte des "+@STR$(Zähler&)+". ACEs=$"+@HEX$(@LONG(ACE#,4))
                LET Zähler&=Zähler&+1
                Dispose SID2#
                Dispose ACE#

            wend

        Endif

    Endif

    LET FEHLER&=@CloseHandle(@LONG(Token#,0))
    ADDSTRING "Rückgabe von CloseHandle="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Dispose P_ACE#
    Dispose ACL_INFO#
    Dispose DACL_D#
    Dispose P_ACL#
    Dispose DACL_PRESENT#
    Dispose SID_NAME_USE#
    Dispose ACCOUNT_NAME#
    Dispose SIZE_ACCOUNT#
    Dispose Domain#
    Dispose SIZE_DOMAIN#
    Dispose SID#
    Dispose GFLAG#
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#
    Dispose STRSID#
    Dispose P_STRSID#
    @Editbox("API Rückgaben",1)

Endif

Mientras que 0=0

    Waitinput

Wend

 
25.04.2005  
 




CB
Alle 3 otra vez völlig identisch - tut leid..

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



¡Hola Christian...

Ziemlich merkwürdige Sache - pero yo habe como una verdacht. Jetzt Besserung?
KompilierenMarcaSeparación
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 @GetSecurityDescriptorDACL(4) !"ADVAPI32","GetSecurityDescriptorDacl"
DEF @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSecurityDescriptor(1) !"ADVAPI32","IsValidSecurityDescriptor"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
DEF @IsValidAcl(1) !"ADVAPI32","IsValidAcl"
DEF @GetAclInformation(4) !"ADVAPI32","GetAclInformation"
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @GetAce(3) !"ADVAPI32","GetAce"
DEF @ConvertSidToStringSid(2) !"ADVAPI32","ConvertSidToStringSidA"
DEF @LocalFree(1) !"KERNEL32","LocalFree"
Declare Filename$,Fehler&,PSECURITY_DESCRIPTOR#,Needed#,Needed&
Declare NewState#,token#,Privileg#,Luid#,System$
Declare Laufwerk$,Label#,LFLAGS#,DAT#
DEclare SID#,GFLAG#
DEclare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare Test&
Declare DACL_PRESENT#,P_ACL#,DACL_D#
Declare ACL_INFO#,Zähler&,ACE#,P_ACE#,ACE_SIZE&,STRSID#,P_STRSID#
Declare SID2#,IO%,ADDR_NEWSTATE&
LET Filename$=@LOADFILE$("Datei laden","Alle Dateien |*.*|Textdateien|*.TXT")

IF Filename$<>""

    CLEARLIST
    LET LAUFWERK$=@LEFT$(Filename$,3)
    DIM Label#,256
    DIM LFLAGS#,4
    DIM DAT#,256
    DIM STRSID#,256
    DIM P_STRSID#,4
    ADDSTRING "Gewählte Datei="+Filename$
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    LET FEHLER&=@GetVolumeInformation(@ADDR(Laufwerk$),Label#,256,0,0,LFlags#,DAT#,256)
    ADDSTRING "Rückgabe von GetVolumeInformation="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    ADDSTRING "Laufwerksflags="+@BIN$(@LONG(LFLAGS#,0))

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

        ADDSTRING "Zugriff ist einschränkbar"

    else

        ADDSTRING "Zugriff ist nicht einschränkbar"

    endif

    ADDSTRING "Ausgelesene Partition="+@String$(Dat#,0)
    dim token#,4
    DIM NewState#,16
    DIM Luid#,8
    DIM Privileg#,33
    ADDSTRING "Windowsversion="+$WINVER
    Long NewState#,0=1 Nur ein Privileg soll geändert werden
    Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
    LET FEHLER&=@OpenProcessToken(@GetCurrentProcess(),$0020 | $0008,Token#)
    ADDSTRING "Rückgabe von OpenProcessToken="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Clear Privileg#
    Clear LUID#
    STRING Privileg#,0="SeSecurityPrivilege"
    LET Fehler&=@LookupPrivilegeValue(@addr(System$),Privileg#,LUID#)
    ADDSTRING "Rückgabe von LookupPrivilegeValue für SeSecurityPrivilege="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    ADDSTRING "Reset des API-Fehlers wird durchgeführt"
    @SetLastError(0)
    LET IO%=%IORESULT
    LET ADDR_NEWSTATE&=NewState#
    LET ADDR_NEWSTATE&=ADDR_NEWSTATE&+4
    @CopyMemory(ADDR_NEWSTATE&,Luid#,8)
    Let Fehler&=@AdjustTokenPrivileges(@LONG(Token#,0),0,NewState#,0,0,0)
    ADDSTRING "Rückgabe von AdjustTokenPrivileges="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Clear NewState#
    Long NewState#,0=1 Nur ein Privileg soll geändert werden
    Long NewState#,12=$00000002 Das Privileg soll eingeschaltet werden
    Clear Privileg#
    Clear LUID#
    STRING Privileg#,0="SeTakeOwnershipPrivilege"
    LET Fehler&=@LookupPrivilegeValue(@addr(System$),Privileg#,LUID#)
    ADDSTRING "Rückgabe von LookupPrivilegeValue fur SeTakeOwnershipPrivilege="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    ADDSTRING "Reset des API-Fehlers wird durchgeführt"
    @SetLastError(0)
    LET IO%=%IORESULT
    LET ADDR_NEWSTATE&=NewState#
    LET ADDR_NEWSTATE&=ADDR_NEWSTATE&+4
    @CopyMemory(ADDR_NEWSTATE&,Luid#,8)
    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 "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())

    endif

    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())
    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 DACL_PRESENT#,1
    DIM P_ACL#,4
    DIM DACL_D#,4
    Let Fehler&=@GetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,DACL_PRESENT#,P_ACL#,DACL_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 Fehler&=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 "ACEs in ACL="+@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
                ADDSTRING @STR$(Zähler&)+". ACE Bezogen auf SID="+@String$(ACCOUNT_NAME#,0)
                ADDSTRING @STR$(Zähler&)+". ACE Bezogen auf Domainname="+@String$(Domain#,0)
                ADDSTRING "Accessrechte des "+@STR$(Zähler&)+". ACEs=$"+@HEX$(@LONG(ACE#,4))
                LET Zähler&=Zähler&+1
                Dispose SID2#
                Dispose ACE#

            wend

        Endif

    Endif

    LET FEHLER&=@CloseHandle(@LONG(Token#,0))
    ADDSTRING "Rückgabe von CloseHandle="+@STR$(Fehler&)
    ADDSTRING "Letzter API-Fehler="+@STR$(@GetLastError())
    Dispose P_ACE#
    Dispose ACL_INFO#
    Dispose DACL_D#
    Dispose P_ACL#
    Dispose DACL_PRESENT#
    Dispose SID_NAME_USE#
    Dispose ACCOUNT_NAME#
    Dispose SIZE_ACCOUNT#
    Dispose Domain#
    Dispose SIZE_DOMAIN#
    Dispose SID#
    Dispose GFLAG#
    Dispose Luid#
    Dispose Privileg#
    Dispose NewState#
    Dispose token#
    Dispose Needed#
    Dispose PSECURITY_DESCRIPTOR#
    Dispose Label#
    Dispose LFlags#
    DISPOSE DAT#
    Dispose STRSID#
    Dispose P_STRSID#
    @Editbox("API Rückgaben",1)

Endif class=s4 href='./../../references-fonction/XProfan/mientras que/'>Mientras que 0=0

    Waitinput

Wend

 
25.04.2005  
 




CB
Ist una dornenreicher Weg, aber wir kriegen el langsam hin:
1. Priv. XP:
[quote:ad081d6cfc]Gewählte Datei=C:Windowsegedit.exe
Letzter API-Fehler=0
Rückgabe de GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=1110000000011111111
Zugriff es einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=5.1
Rückgabe de OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue para SeSecurityPrivilege=1
Letzter API-Fehler=997
Reset des API-Fehlers se durchgeführt
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue fur SeTakeOwnershipPrivilege=1
Letzter API-Fehler=997
Reset des API-Fehlers se durchgeführt
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Longitud des Security Descriptor=80
Rückgabe de GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe de IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el Besitzer=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers se durchgeführt
Domainname=VORDEFINIERT
Besitzer el Datei=Administratoren
String-SID des Besitzers=S-1-5-32-544
Rückgabe de ConvertSidToStringSid=1
Letzter API-Fehler=0
Rückgabe de LocalFree para el String-SID=0
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorGroup=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el primäre Gruppe=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers se durchgeführt
Domainname=VORDEFINIERT
Primäre Gruppe el Datei=Administratoren
Rückgabe de GetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Rückgabe de IsValidAcl para el DACL=1
Letzter API-Fehler=0
Rückgabe de GetAclInformation=1
Letzter API-Fehler=0
ACEs en ACL=1
Größe des 1.ACEs=20
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=997
Reset des API-Fehlers se durchgeführt
0. ACE Bezogen en SID=Jeder
0. ACE Bezogen en Domainname=
Accessrechte des 0. ACEs=$1F01FF
Rückgabe de CloseHandle=1
Letzter API-Fehler=0[/quote:ad081d6cfc]
2. NT:
[quote:ad081d6cfc]Gewählte Datei=C:WINNTegedit.exe
Letzter API-Fehler=0
Rückgabe de GetVolumeInformation=1
Letzter API-Fehler=0
Laufwerksflags=11111
Zugriff es einschränkbar
Ausgelesene Partition=NTFS
Windowsversion=4.0
Rückgabe de OpenProcessToken=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue para SeSecurityPrivilege=1
Letzter API-Fehler=0
Reset des API-Fehlers se durchgeführt
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de LookupPrivilegeValue fur SeTakeOwnershipPrivilege=1
Letzter API-Fehler=0
Reset des API-Fehlers se durchgeführt
Rückgabe de AdjustTokenPrivileges=1
Letzter API-Fehler=0
Rückgabe de GetFileSecurity=0
Letzter API-Fehler=122
Erforderliche Longitud des Security Descriptor=176
Rückgabe de GetFileSecurity=1
Letzter API-Fehler=0
Rückgabe de IsValidSecurityDescriptor=1
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorOwner=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el Besitzer=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=0
Reset des API-Fehlers se durchgeführt
Domainname=VORDEFINIERT
Besitzer el Datei=Administratoren
Rückgabe de LocalFree para el String-SID=0
Letzter API-Fehler=0
Rückgabe de GetSecurityDescriptorGroup=1
Letzter API-Fehler=0
Rückgabe de IsValidSid para el primäre Gruppe=1
Letzter API-Fehler=0
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=0
Reset des API-Fehlers se durchgeführt
Domainname=NT-AUTORITÄT
Primäre Gruppe el Datei=SYSTEM
Rückgabe de GetSecurityDescriptorDacl=1
Letzter API-Fehler=0
Rückgabe de IsValidAcl para el DACL=1
Letzter API-Fehler=0
Rückgabe de GetAclInformation=1
Letzter API-Fehler=0
ACEs en ACL=2
Größe des 1.ACEs=24
ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=0
Reset des API-Fehlers se durchgeführt
0. ACE Bezogen en SID=Jeder
0. ACE Bezogen en Domainname=
Accessrechte des 0. ACEs=$1F01FF
Größe des 2.ACEs=36
ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE
Rückgabe de LookupAccountSid=1
Letzter API-Fehler=0
Reset des API-Fehlers se durchgeführt
1. ACE Bezogen en SID=cb
1. ACE Bezogen en Domainname=GEV021PC01
Accessrechte des 1. ACEs=$1F01FF
Rückgabe de CloseHandle=1
Letzter API-Fehler=0[/quote:ad081d6cfc]
3. Firma XP: Bereichsvariable no DIMensioniert en Línea 99.

NT-Test kann Yo sólo morgen otra vez durchführen, si Usted 2000 y 98 interés, beides hätte I uno alten Kiste zuhause.

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




Respuesta


Título del Tema, max. 100 Signo.
 

Systemprofile:

Kein Systemprofil creado. [anlegen]

XProfan:

 Contribución  Font  Smilies  ▼ 

Bitte registro en una Contribución a verfassen.
 

Tema opciones

6.025 Views

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

Themeninformationen



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