Forum | | | | - 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? |
| | | | |
| | | | - Seite 3 - |
| | CB | Hallo Andreas!
Habs schon mal durchlaufen lassen. [quote:dbd502c749]Gewählte Datei=C:WINDOWSWEBInstall.ocx 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=212 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 für den Besitzer=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=MMC3 Besitzer der Datei=CB Rückgabe von GetSecurityDescriptorGroup=1 Letzter API-Fehler=997 Rückgabe von IsValidSid für die primäre Gruppe=1 Letzter API-Fehler=997 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=MMC3 Primäre Gruppe der Datei=Kein Rückgabe von CloseHandle=1 Letzter API-Fehler=997[/quote:dbd502c749] Christian |
| | | | |
| | | Damit die anderen besser dem folgen können was hier passiert, werde ich jetzt mal anhand einer Datenbankanwendung zusammenfassen:
Problem: Wenn ein Administrator eine (Profan) Anwendung auf eine NTFS-Festplatte installiert, können evtl. User mit eingeschränkten Rechten dieses Programm nicht ausführen, da sie keinen Zugriff auf die Datenbankdateien haben. Das hat den Grund, daß die Sicherheitseinstellungen der Datei (Security Descriptor) in der Regel von den übergeordneten Verzeichnissen übernommen werden.
Fazit: Das Schreiben vernünftiger Firmensoftware ist ohne den Zugriff auf den Security Descriptor nicht möglich.
Lösungsansatz: Wir versuchen die Daten des Security Descriptors einer NTFS-Datei auszulesen, um Infos über die Formatierung dieser Daten zu erhalten. Ein Ändern ist dann später über die dazugehörigen APIs sehr leicht möglich.
Vorarbeiten: Wie bei fast allen Systemeinstellungen müssen auch hier die zugehörigen Privilegien des aufrufenden Prozessses aktiviert werden, um die Daten auslesen zu können (siehe PrivAktivate im Downloadbereich). Zum Auslesen ist das hier vor allem das Privileg SeSecurityPrivilege.
Wie weit sind wir: Privilegien wurden erfolgreich aktiviert und der Besitzer einer Datei wurde ausgelesen und ist damit auch änderbar (auch dazu muss dann später aber noch evtl. ein Privileg aktiviert werden). Ich denke, daß auch das Auslesen der primären Gruppe funktioniert. |
| | | | |
| | | Voila...
So, jetzt muss ich wohl erst einmal was erklären - wenn das jeder schon wissen sollte, erschlagt mich bitte nicht gleich:
Der DACL legt fest, welche User und Gruppen welche Zugriffsrechte auf die Datei haben. Beim Zugriff auf die Datei muss der User quasi angeben, was er mit der Datei vor hat (access rights). Sind diese Zugriffsrechte nicht für den entsprechenden User vorhanden, gibt das System den Zugriff auf das Handle nicht frei (siehe auch API CreateFile). Die einzelnen User sind mit ihren erlaubten oder verbotenen Zugriffsrechten in sogenannten ACEs innerhalb der DACL gespeichert. => Ist extrem vereinfacht!
Hier der Quellcode - ich brauche für den Test eine Datei mit möglichst unterschiedlichen Einschränkungen für möglichst viele User und Gruppen - am besten mehrere Dateien: KompilierenMarkierenSeparierenWindowstyle 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
While 0=0
Waitinput
Wend
Hier noch die Testergebnisse: [box:8db057e781] Gewählte Datei=H:TestTest 2.doc Letzter API-Fehler=0 Rückgabe von GetVolumeInformation=1 Letzter API-Fehler=0 Laufwerksflags=1110000000011111111 Zugriff ist einschränkbar Ausgelesene Partition=NTFS Windowsversion=5.0 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=176 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 für den Besitzer=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=ANDREAS-N4WTRUA Besitzer der Datei=Andreas String-SID des Besitzers=S-1-5-21-602162358-2111687655-1202660629-1000 Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorGroup=1 Letzter API-Fehler=0 Rückgabe von IsValidSid für die primäre Gruppe=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=ANDREAS-N4WTRUA Primäre Gruppe der Datei=Kein Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=997 Rückgabe von GetAclInformation=1 Letzter API-Fehler=997 ACEs in ACL=4 Größe des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_DENIED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 0. ACE Bezogen auf SID=Hauptbenutzer 0. ACE Bezogen auf Domainname=VORDEFINIERT Accessrechte des 0. ACEs=$200A9 Größe des 2.ACEs=24 ACE Typ des 2.ACEs=ACCESS_DENIED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 1. ACE Bezogen auf SID=Hauptbenutzer 1. ACE Bezogen auf Domainname=VORDEFINIERT Accessrechte des 1. ACEs=$F00E9 Größe des 3.ACEs=24 ACE Typ des 3.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 2. ACE Bezogen auf SID=Administratoren 2. ACE Bezogen auf Domainname=VORDEFINIERT Accessrechte des 2. ACEs=$1F01FF Größe des 4.ACEs=20 ACE Typ des 4.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 3. ACE Bezogen auf SID=Jeder 3. ACE Bezogen auf Domainname= Accessrechte des 3. ACEs=$120089 Rückgabe von CloseHandle=1 Letzter API-Fehler=997 [/box:8db057e781] [box:8db057e781] Gewählte Datei=H:TestTest.doc Letzter API-Fehler=0 Rückgabe von GetVolumeInformation=1 Letzter API-Fehler=0 Laufwerksflags=1110000000011111111 Zugriff ist einschränkbar Ausgelesene Partition=NTFS Windowsversion=5.0 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 für den Besitzer=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=ANDREAS-N4WTRUA Besitzer der Datei=Andreas String-SID des Besitzers=S-1-5-21-602162358-2111687655-1202660629-1000 Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorGroup=1 Letzter API-Fehler=0 Rückgabe von IsValidSid für die primäre Gruppe=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=ANDREAS-N4WTRUA Primäre Gruppe der Datei=Kein Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=997 Rückgabe von GetAclInformation=1 Letzter API-Fehler=997 ACEs in ACL=1 Größe des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 0. ACE Bezogen auf SID=Jeder 0. ACE Bezogen auf Domainname= Accessrechte des 0. ACEs=$1F01FF Rückgabe von CloseHandle=1 Letzter API-Fehler=997 [/box:8db057e781] Und wieder mal steht hier im kleinen XProfan Forum ein Quellcode mehr, an dem sich schon so mancher Programmierende den Kopf eingeschlagen hat.
Neben dem Testen habe ich jetzt noch eine Frage: Ich muss zum Ändern des ACLs irgendwie an die Namen oder SIDs der im System vorhandenen User und Gruppen kommen. Hat jemand eine Idee, wie man das am elegantesten regelt? |
| | | | |
| | CB | Hallo Andreas! Paar interessante Resultate:
1. XP auf meinem privaten PC: [quote:1dbcf84ece]Gewählte Datei=C:NTLDR 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=80 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 für den Besitzer=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=VORDEFINIERT Besitzer der Datei=Administratoren String-SID des Besitzers=S-1-5-32-544 Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorGroup=1 Letzter API-Fehler=0 Rückgabe von IsValidSid für die primäre Gruppe=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=VORDEFINIERT Primäre Gruppe der Datei=Administratoren Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=997 Rückgabe von GetAclInformation=1 Letzter API-Fehler=997 ACEs in ACL=1 Größe des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 0. ACE Bezogen auf SID=Jeder 0. ACE Bezogen auf Domainname= Accessrechte des 0. ACEs=$1F01FF Rückgabe von CloseHandle=1 Letzter API-Fehler=997 [/quote:1dbcf84ece] 2. NT: siehe .jpg
3. XP Pro auf Firmen-PC mit nur Benutzerrechten: Zeile 83: Bereichsvariable ist nicht DIMensioniert.
4. schicke Dir ein paar Auszüge aus meiner Reg per PM - ist einiges Interessante für Dich drin
Christian |
| | | | |
| | | Hallo Christian...
Zu Nr.1: Sieht doch gut aus, oder?
Zu Nr.2: Diese API gibt es unter NT wohl noch nicht - ist aber für das, was wir vorhaben, auch nicht nötig.
ZU Nr.3: Ich habe vergessen, vor der Verwendung einige Bereichsvariablen zu clearen. In der Security rächt sich das ganz böse!
zu Nr.4: Bitte einen Screenshot, ja?
Korrektur (hoffentlich läufts): KompilierenMarkierenSeparierenWindowstyle 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
While 0=0
Waitinput
Wend
|
| | | | |
| | CB | Hallo Andreas! Sieht tatsächlich ganz gut aus!
Nächster Test: XP privat: [quote:ddf59fc77f]Gewählte Datei=C:WINDOWSegedit.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=80 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 für den Besitzer=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=VORDEFINIERT Besitzer der Datei=Administratoren String-SID des Besitzers=S-1-5-32-544 Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorGroup=1 Letzter API-Fehler=0 Rückgabe von IsValidSid für die primäre Gruppe=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Domainname=VORDEFINIERT Primäre Gruppe der Datei=Administratoren Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=997 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=997 Rückgabe von GetAclInformation=1 Letzter API-Fehler=997 ACEs in ACL=1 Größe des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 0. ACE Bezogen auf SID=Jeder 0. ACE Bezogen auf Domainname= Accessrechte des 0. ACEs=$1F01FF Rückgabe von CloseHandle=1 Letzter API-Fehler=997 [/quote:ddf59fc77f] NT: (funzt jetzt) [quote:ddf59fc77f]Gewählte Datei=C:WINNTegedit.exe Letzter API-Fehler=0 Rückgabe von GetVolumeInformation=1 Letzter API-Fehler=0 Laufwerksflags=11111 Zugriff ist einschränkbar Ausgelesene Partition=NTFS Windowsversion=4.0 Rückgabe von OpenProcessToken=1 Letzter API-Fehler=0 Rückgabe von LookupPrivilegeValue=1 Letzter API-Fehler=0 Rückgabe von AdjustTokenPrivileges=1 Letzter API-Fehler=0 Rückgabe von GetFileSecurity=0 Letzter API-Fehler=122 Erforderliche Länge des Security Descriptor=176 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 für den Besitzer=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=0 Domainname=VORDEFINIERT Besitzer der Datei=Administratoren Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorGroup=1 Letzter API-Fehler=0 Rückgabe von IsValidSid für die primäre Gruppe=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=0 Domainname=NT-AUTORITÄT Primäre Gruppe der Datei=SYSTEM Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=0 Rückgabe von GetAclInformation=1 Letzter API-Fehler=0 ACEs in ACL=2 Größe des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=0 0. ACE Bezogen auf SID=Jeder 0. ACE Bezogen auf Domainname= Accessrechte des 0. ACEs=$1F01FF Größe des 2.ACEs=36 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=0 1. ACE Bezogen auf SID=cb 1. ACE Bezogen auf Domainname=GEV021PC01 Accessrechte des 1. ACEs=$1F01FF Rückgabe von CloseHandle=1 Letzter API-Fehler=0 [/quote:ddf59fc77f] Aber XP auf meinem Firmen-PC meldet immer noch: Bereichsvariable in Zeile 83 nicht dimensioniert.
Christian |
| | | | |
| | | Neuer Versuch: KompilierenMarkierenSeparierenWindowstyle 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
While 0=0
Waitinput
Wend
Ohne ACL ist die Schleife unnütz... |
| | | | |
| | CB | 1. Priv. PC und 2. NT: völlig identische Resultate 3. Unserem Firmen-PC fehlt noch immer ein DIM in Zeile 83 ...
Christian |
| | | | |
| | | OK, noch was gefunde: KompilierenMarkierenSeparierenWindowstyle 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
While 0=0
Waitinput
Wend
|
| | | | |
| | CB | Alle 3 wieder völlig identisch - tut leid..
Christian |
| | | | |
| | | Hallo Christian...
Ziemlich merkwürdige Sache - aber ich habe da einen verdacht. Jetzt Besserung? KompilierenMarkierenSeparierenWindowstyle 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
While 0=0
Waitinput
Wend
|
| | | | |
| | CB | Ist ein dornenreicher Weg, aber wir kriegen das langsam hin: 1. Priv. XP: [quote:ad081d6cfc]Gewählte Datei=C:Windowsegedit.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 für SeSecurityPrivilege=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe von AdjustTokenPrivileges=1 Letzter API-Fehler=0 Rückgabe von LookupPrivilegeValue fur SeTakeOwnershipPrivilege=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Rückgabe von AdjustTokenPrivileges=1 Letzter API-Fehler=0 Rückgabe von GetFileSecurity=0 Letzter API-Fehler=122 Erforderliche Länge des Security Descriptor=80 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 für den Besitzer=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Domainname=VORDEFINIERT Besitzer der Datei=Administratoren String-SID des Besitzers=S-1-5-32-544 Rückgabe von ConvertSidToStringSid=1 Letzter API-Fehler=0 Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorGroup=1 Letzter API-Fehler=0 Rückgabe von IsValidSid für die primäre Gruppe=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt Domainname=VORDEFINIERT Primäre Gruppe der Datei=Administratoren Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=0 Rückgabe von GetAclInformation=1 Letzter API-Fehler=0 ACEs in ACL=1 Größe des 1.ACEs=20 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=997 Reset des API-Fehlers wird durchgeführt 0. ACE Bezogen auf SID=Jeder 0. ACE Bezogen auf Domainname= Accessrechte des 0. ACEs=$1F01FF Rückgabe von CloseHandle=1 Letzter API-Fehler=0[/quote:ad081d6cfc] 2. NT: [quote:ad081d6cfc]Gewählte Datei=C:WINNTegedit.exe Letzter API-Fehler=0 Rückgabe von GetVolumeInformation=1 Letzter API-Fehler=0 Laufwerksflags=11111 Zugriff ist einschränkbar Ausgelesene Partition=NTFS Windowsversion=4.0 Rückgabe von OpenProcessToken=1 Letzter API-Fehler=0 Rückgabe von LookupPrivilegeValue für SeSecurityPrivilege=1 Letzter API-Fehler=0 Reset des API-Fehlers wird durchgeführt Rückgabe von AdjustTokenPrivileges=1 Letzter API-Fehler=0 Rückgabe von LookupPrivilegeValue fur SeTakeOwnershipPrivilege=1 Letzter API-Fehler=0 Reset des API-Fehlers wird durchgeführt Rückgabe von AdjustTokenPrivileges=1 Letzter API-Fehler=0 Rückgabe von GetFileSecurity=0 Letzter API-Fehler=122 Erforderliche Länge des Security Descriptor=176 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 für den Besitzer=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=0 Reset des API-Fehlers wird durchgeführt Domainname=VORDEFINIERT Besitzer der Datei=Administratoren Rückgabe von LocalFree für den String-SID=0 Letzter API-Fehler=0 Rückgabe von GetSecurityDescriptorGroup=1 Letzter API-Fehler=0 Rückgabe von IsValidSid für die primäre Gruppe=1 Letzter API-Fehler=0 Rückgabe von LookupAccountSid=1 Letzter API-Fehler=0 Reset des API-Fehlers wird durchgeführt Domainname=NT-AUTORITÄT Primäre Gruppe der Datei=SYSTEM Rückgabe von GetSecurityDescriptorDacl=1 Letzter API-Fehler=0 Rückgabe von IsValidAcl für den DACL=1 Letzter API-Fehler=0 Rückgabe von GetAclInformation=1 Letzter API-Fehler=0 ACEs in ACL=2 Größe des 1.ACEs=24 ACE Typ des 1.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=0 Reset des API-Fehlers wird durchgeführt 0. ACE Bezogen auf SID=Jeder 0. ACE Bezogen auf Domainname= Accessrechte des 0. ACEs=$1F01FF Größe des 2.ACEs=36 ACE Typ des 2.ACEs=ACCESS_ALLOWED_ACE_TYPE Rückgabe von LookupAccountSid=1 Letzter API-Fehler=0 Reset des API-Fehlers wird durchgeführt 1. ACE Bezogen auf SID=cb 1. ACE Bezogen auf Domainname=GEV021PC01 Accessrechte des 1. ACEs=$1F01FF Rückgabe von CloseHandle=1 Letzter API-Fehler=0[/quote:ad081d6cfc] 3. Firma XP: Bereichsvariable nicht DIMensioniert in Zeile 99.
NT-Test kann ich erst morgen wieder durchführen, wenn Dich 2000 und 98 interessieren, beides hätte ich auf einer alten Kiste zuhause.
Christian |
| | | | |
|
AntwortenThemenoptionen | 5.639 Betrachtungen |
ThemeninformationenDieses Thema hat 6 Teilnehmer: |