|
Description:
GetTokenInformation reads from the Access Token one eingelogten Users Information from (u.a. over this User). These function there only NT-based Windowssystemen.
Deklaration:
DEF @GetTokenInformation(5) !advapi32,GetTokenInformation
Parameter:
1.Parameter: lever the Access Token. the lever must TOKEN_QUERY ($8) Zugriffrechte having. should The fountain the Tokens determined go, is too TOKEN_QUERY_SOURCE Access necessary ($10). 2.Parameter: One TOKEN_INFORMATION_CLASS Flag, the angibt which Information read go should. => -$1 = determined whom Usernamen (whom SID the Users) from the Token (TokenUser) -$2 = determined The groups (SID’s the groups), in them the User Member is (TokenGroups). -$3 = determined The Privilegien (LUID’s) and its attributes, over The the User verfügt (TokenPrivileges). -$4 = determined whom User or The group (SID), The at create Objects as proprietor registered becomes (TokenOwner). -$5 = determined The Primäre group (SID) the Users (TokenPrimaryGroup). -$6 = determined whom DACL, the at produce Objects by the User as standard is used (TokenDefaultDacl). -$7 = determined The fountain one Token (TokenSource). -$8 = determined whom type the Token (TokenType). -$9 = determined whom Security Impersonation Level one Impersonation Token (TokenImpersonationLevel).). -$10 = determined data over The ID the Token (TokenId), The ID the Session (AuthenticationId), whom type the Token, whom Impersonation Level one Imoersonation Token (ImpersonationLevel), whom verwendeten Speicherplatz (DynamicCharged), The Number of groups in the Token (GroupCount), The Number of Privilegien in the Token (PrivilegeCount) and over The latest Veränderung the Token (ModifiedId). 3.Parameter: an Memory-Variable, The The angefragten data aufnimmt: If Parameter 2 $1 is, is this Parameter a 8 byte large TOKEN_USER structure.=> -Bytes 0-3 = address the SID the Users, whom the Token personifiziert. -Bytes 4-7 = ? Happen? for attributes the SID’s the Users, to Time not used. If Parameter 2 $2 is, is this Parameter a TOKEN_GROUPS structure, from one aray from SID_AND_ATTRIBUTES Structures and the Number of groups exists: -byte 0-3 = Number of groups in the aray. -byte 4-7 = address the SID’s the 1.group. -byte 8-11 = ? Happen? for attributes the SID’s the 1. group: $1 = group can't deleted go (SE_GROUP_MANDATORY). $2 = group is standardmäßig activate (SE_GROUP_ENABLED_BY_DEFAULT). $4 = group is active (SE_GROUP_ENABLED). $8 = group can one proprietor Objects his (SE_GROUP_OWNER). $C0000000 = group is a Logonname (SE_GROUP_LOGON_ID). -byte 12-15 = address the SID’s the 2.group. -byte 16-19 = ? Happen? for attributes the SID’s the 2. group -.... If Parameter 2 $3 is, is this Parameter a 4 byte large TOKEN_Owner structure.=> -byte 0-3 = Number of Privilegien in the aray. -byte 4-11 = LUID the 1.Privilegs. -byte 12-15 = ? Happen? for attributes the 1.Privilegs: $0 = privilege is deaktiviert. $1 = privilege is standardmäßig activate. $2 = privilege is activate. $80000000 = privilege watts to that grabbed using. -byte 16-23 = LUID the 2.Privilegs. -byte 24-27 = ? Happen? for attributes the 2.Privilegs: -.... If Parameter 2 $4 is, is this Parameter a 4 byte large TOKEN_OWNER structure.=> -byte 0-3 = address the SID’s the Users or the group, The at create Objects as proprietor registered becomes. If Parameter 2 $5 is, is this Parameter a 4 byte large TOKEN_PRIMARY_GROUP structure.=> -byte 0-3 = address the SID’s the Primären group the Users. If Parameter 2 $6 is, is this Parameter a 4 byte large TOKEN_DEFAULT_DACL structure.=> -byte 0-3 = address the DACL’s, the at produce Objects by the User as standard is used. If Parameter 2 $7 is, is this Parameter a 16 byte large TOKEN_SOURCE structure.=> -byte 0-7 = 8 byte great Charakterstring, the The fountain the Token angibt. -byte 8-15 = LUID the fountain the Token. If Parameter 2 $8 is, is this Parameter a 4 byte large TOKEN_TYPE structure, its LongInt worth The manner the Token angibt.=> -$1 = Primärer Token (TokenPrimary). -$2 = Impersonation Token (TokenImpersonation) If Parameter 2 $9 is, is this Parameter a 4 byte large SECURITY_IMPERSONATION_LEVEL structure, its LongInt worth whom Impersonation Level the Token angibt, if this one Impersonation Token is. => -$1 = SecurityAnonymous -$2 = SecurityIdentification -$3 = SecurityImpersonation -$4 = SecurityDelegation If Parameter 2 $10 is, is this Parameter a 52 byte large TOKEN_STATISTICS structure.=> -byte 0-7 = LUID, the deie ID the Token repräsentiert. -byte 8-15 = LUID, the The Session repräsentiert. -byte 16-19 = Ablaufzeit the Token. Currently not supported. -byte 20-23 = Flag for manner the Token. $1 = Primärer Token (TokenPrimary). $2 = Impersonation Token (TokenImpersonation) -byte 24-27 = Impersonation Level the Token, if this one Impersonation Token is. $1 = SecurityAnonymous $2 = SecurityIdentification $3 = SecurityImpersonation $4 = SecurityDelegation -byte 28-31 = The Number of Bytes, The to that Save Primärer group and DACL reserved are. -byte 32-35 = The Number of Bytes, The in the reserved Speicherbereich of Primärer group and DACL yet spare are. -byte 36-39 = Number of groups in the Token as LongInt. -byte 40-43 = Number of Privilegien in the Token as LongInt. -byte 44-51 = LUID the itself each time changes, if itself something in the Token changed. 4.Parameter: the stature in Bytes the Bereichs from Parameter 3. 5.Parameter: 4 byte Memory-Variable, The The Number of for Parameter 3 required Bytes aufnimmt. is these number larger as Parameter 4, go no data in Parameter 3 transfer and the function proposes fehl.
Return Value:
1 with success, 0 with Error.
Examples:
CompileMarkSeparationDEF @OpenProcessToken(3) !"advapi32","OpenProcessToken"
DEF @GetTokenInformation(5) !"advapi32","GetTokenInformation"
DEF @GetCurrentProcess(0) !"kernel32","GetCurrentProcess" Ermittel das Handle des aktiven Prozesses.
DEF @CloseHandle(1) !"kernel32","CloseHandle" Schließt ein Handle (Programm).
DEF @GetLastError(0) !"kernel32","GetLastError" Liefert letzten API Fehler.
DEF @LookupAccountSid(7) !"ADVAPI32","LookupAccountSidA"
DEF @IsValidSid(1) !"ADVAPI32","IsValidSid"
DEF @LookupPrivilegeName(4) !"advapi32","LookupPrivilegeNameA" Ermittelt aus dem Luid eines Privilegs dessen Namen.
DEF @CopyMemory(3) !"kernel32","RtlMoveMemory"
DEF @GetLengthSid(1) !"advapi32","GetLengthSid"
Declare Token#,Token&,PSID#,Erforderlich#,Zähler2&,SIDFlags&
Declare Erforderlich&,Fehler&,PSID&,System$,Zähler&,Attribute$
Declare ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#
Declare User$,PRIVLUID#,SID_STRUC#
Windowstyle 31
WindowTitle "Informationen im aktuellen Token"
Window 0,0-%MAXX,%MAXY-40
DIM Token#,4
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
LET Fehler&=@OpenProcessToken(@GetCurrentProcess(),$8,Token#)
ADDSTRING "Fehlercode OpenProcessToken="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Let Token&=@LONG(Token#,0)
Dispose Token#
ADDSTRING "Handle des Token="+@STR$(Token&)
DIM Erforderlich#,4
DIM PSID#,1
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,1,PSID#,1,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Addstring "Erforderliche Bufferlänge="+@STR$(@LONG(Erforderlich#,0))
Let Erforderlich&=@LONG(Erforderlich#,0)
Dispose PSID#
DIM PSID#,Erforderlich&
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,1,PSID#,Erforderlich&,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
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 System$=""
LET FEHLER&=@LookupAccountSid(@ADDR(System$),@LONG(PSID#,0),ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Fehlercode LookupAccountSid="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
ADDSTRING "Eigentümer des Token="+@String$(ACCOUNT_NAME#,0)
Print "Eigentümer des Token="+@String$(ACCOUNT_NAME#,0)
LET USER$=@String$(ACCOUNT_NAME#,0)
Dispose PSID#
DIM PSID#,1
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,1,PSID#,1,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Addstring "Erforderliche Bufferlänge="+@STR$(@LONG(Erforderlich#,0))
Let Erforderlich&=@LONG(Erforderlich#,0)
Dispose PSID#
DIM PSID#,Erforderlich&
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,1,PSID#,Erforderlich&,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Long SIZE_ACCOUNT#,0=255
LONG SIZE_DOMAIN#,0=255
LET System$=""
LET FEHLER&=@LookupAccountSid(@ADDR(System$),@LONG(PSID#,0),ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Fehlercode LookupAccountSid="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
ADDSTRING "Durch den Token personifizierter User="+@String$(ACCOUNT_NAME#,0)
Print "Durch den Token personifizierter User="+@String$(ACCOUNT_NAME#,0)
Dispose PSID#
DIM PSID#,1
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,8,PSID#,1,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Addstring "Erforderliche Bufferlänge="+@STR$(@LONG(Erforderlich#,0))
Let Erforderlich&=@LONG(Erforderlich#,0)
Dispose PSID#
DIM PSID#,Erforderlich&
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,8,PSID#,Erforderlich&,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
IF @Long(PSID#,0)=$1
ADDSTRING "Art des Token=Primärer Token"
elseif @Long(PSID#,0)=$2
ADDSTRING "Art des Token=Impersonation Token"
endif
Dispose PSID#
DIM PSID#,1
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,4,PSID#,1,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Addstring "Erforderliche Bufferlänge="+@STR$(@LONG(Erforderlich#,0))
Let Erforderlich&=@LONG(Erforderlich#,0)
Dispose PSID#
DIM PSID#,Erforderlich&
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,4,PSID#,Erforderlich&,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Long SIZE_ACCOUNT#,0=255
LONG SIZE_DOMAIN#,0=255
LET System$=""
LET FEHLER&=@LookupAccountSid(@ADDR(System$),@LONG(PSID#,0),ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Fehlercode LookupAccountSid="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
ADDSTRING "Beim Erstellen von Objekten als Besitzer eingetragen="+@String$(ACCOUNT_NAME#,0)
Print "Beim Erstellen von Objekten als Besitzer eingetragen="+@String$(ACCOUNT_NAME#,0)
Dispose PSID#
DIM PSID#,1
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,3,PSID#,1,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Addstring "Erforderliche Bufferlänge="+@STR$(@LONG(Erforderlich#,0))
Let Erforderlich&=@LONG(Erforderlich#,0)
Dispose PSID#
DIM PSID#,Erforderlich&
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,3,PSID#,Erforderlich&,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Long SIZE_ACCOUNT#,0=255
LONG SIZE_DOMAIN#,0=255
LET System$=""
LET FEHLER&=@LookupAccountSid(@ADDR(System$),PSID#,ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#)
ADDSTRING "Fehlercode LookupAccountSid="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
ADDSTRING "Anzahl der Privilegien für "+User$+"="+@STR$(@LONG(PSID#,0))
LET Zähler&=0
Long SIZE_ACCOUNT#,0=255
lET System$=""
DIM PRIVLUID#,8
While @LONG(PSID#,0)>Zähler&
Long SIZE_ACCOUNT#,0=255
Clear ACCOUNT_NAME#,PRIVLUID#
LET PSID&=PSID#
Let Attribute$="("
@CopyMemory(PRIVLUID#,PSID&+Zähler&*12+4,8)
LET Fehler&=@LookupPrivilegeName(@ADDR(System$),PRIVLUID#,ACCOUNT_NAME#,SIZE_ACCOUNT#)
ADDSTRING "Fehlercode LookupPrivilegeName="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
ADDSTRING "Flags der Attribute des "+@STR$(@INT(Zähler&+1))+".Privilegs=$"+@Hex$(@LONG(PSID#,Zähler&*12+12))
IF @OR(@LONG(PSID#,Zähler&*12+12),$1)=@LONG(PSID#,Zähler&*12+12)
LET Attribute$=Attribute$+"sofort aktiv,"
endif
IF @OR(@LONG(PSID#,Zähler&*12+12),$2)=@LONG(PSID#,Zähler&*12+12)
LET Attribute$=Attribute$+"aktiv,"
endif
IF @OR(@LONG(PSID#,Zähler&*12+12),$80000000)=@LONG(PSID#,Zähler&*12+12)
LET Attribute$=Attribute$+"zum Zugriff benutzt,"
endif
IF @LONG(PSID#,Zähler&*12+12)=$0
LET Attribute$=Attribute$+"deaktiviert,"
endif
IF @LEN(Attribute$)>1
LET ATTRIBUTE$=@LEFT$(Attribute$,@LEN(Attribute$)-1)+")"
Else
LET ATTRIBUTE$=Attribute$+")"
endif
ADDSTRING User$+"s "+@STR$(@INT(Zähler&+1))+".Privileg="+@String$(ACCOUNT_NAME#,0)+" "+Attribute$
PRINT User$+"s "+@STR$(@INT(Zähler&+1))+".Privileg="+@String$(ACCOUNT_NAME#,0)+" "+Attribute$
Let Zähler&=Zähler&+1
wend
Dispose PRIVLUID#
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,2,PSID#,1,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Addstring "Erforderliche Bufferlänge="+@STR$(@LONG(Erforderlich#,0))
Let Erforderlich&=@LONG(Erforderlich#,0)
Dispose PSID#
DIM PSID#,Erforderlich&
Clear PSID#
Clear Erforderlich#
Let Fehler&=@GetTokenInformation(Token&,2,PSID#,Erforderlich&,Erforderlich#)
ADDSTRING "Fehlercode GetTokenInformation="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
ADDSTRING "Anzahl der Gruppen im Token="+@STR$(@LONG(PSID#,0))
LET Zähler&=0
LET Zähler2&=1
While @LONG(PSID#,0)>Zähler&
Clear SID_NAME_USE#
Clear ACCOUNT_NAME#
Clear Domain#
Long SIZE_ACCOUNT#,0=255
LONG SIZE_DOMAIN#,0=255
LET System$=""
ADDSTRING "Länge des SIDs der "+@STR$(Zähler&)+".Gruppe="+@STR$(@GetLengthSid(@LONG(PSID#,Zähler&*8+4)))
DIM SID_STRUC#,@GetLengthSid(@LONG(PSID#,Zähler&*8+4))
@CopyMemory(SID_STRUC#,@LONG(PSID#,Zähler&*8+4),@GetLengthSid(@LONG(PSID#,Zähler&*8+4)))
LET FEHLER&=@IsValidSid(SID_STRUC#)
ADDSTRING "Fehlercode IsValidSid="+@STR$(Fehler&)
LET FEHLER&=@LookupAccountSid(@ADDR(System$),SID_STRUC#,ACCOUNT_NAME#,SIZE_ACCOUNT#,Domain#,SIZE_DOMAIN#,SID_NAME_USE#)
Dispose SID_STRUC#
ADDSTRING "Fehlercode LookupAccountSid="+@STR$(Fehler&)
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
ADDSTRING @Str$(Zähler2&)+".Gruppe im Token="+@String$(ACCOUNT_NAME#,0)
ADDSTRING "Flags der Attribute der "+@Str$(Zähler2&)+".Gruppe im Token=$"+@HEX$(@LONG(PSID#,Zähler&*8+8))
LET Attribute$="("
LET SIDFlags&=@LONG(PSID#,Zähler&*8+8)
IF @OR(@LONG(PSID#,Zähler&*8+8),$1)=@LONG(PSID#,Zähler&*8+8)
LET Attribute$=Attribute$+"nicht löschbar,"
LET SIDFlags&=SIDFlags&-$1
endif
IF @OR(@LONG(PSID#,Zähler&*8+8),$2)=@LONG(PSID#,Zähler&*8+8)
LET Attribute$=Attribute$+"standardmäßig aktiviert,"
LET SIDFlags&=SIDFlags&-$2
endif
IF @OR(@LONG(PSID#,Zähler&*8+8),$4)=@LONG(PSID#,Zähler&*8+8)
LET Attribute$=Attribute$+"aktiviert,"
LET SIDFlags&=SIDFlags&-$4
endif
IF @OR(@LONG(PSID#,Zähler&*8+8),$8)=@LONG(PSID#,Zähler&*8+8)
LET Attribute$=Attribute$+"kann Eigentümer sein,"
LET SIDFlags&=SIDFlags&-$8
endif
IF @OR(@LONG(PSID#,Zähler&*8+8),$C0000000)=@LONG(PSID#,Zähler&*8+8)
LET Attribute$=Attribute$+"Logon ID,"
LET SIDFlags&=SIDFlags&-$C0000000
endif
IF SIDFlags&>0
ADDSTRING "Nicht berechnete Attribute=$"+@HEX$(SIDFlags&)
endif
IF @LEN(Attribute$)>1
LET ATTRIBUTE$=@LEFT$(Attribute$,@LEN(Attribute$)-1)+")"
Else
LET ATTRIBUTE$=Attribute$+")"
endif
Addstring "Attribute der "+@Str$(Zähler2&)+".Gruppe im Token="+Attribute$
Print @Str$(Zähler2&)+".Gruppe im Token="+@String$(ACCOUNT_NAME#,0)+" "+Attribute$
Let Zähler2&=Zähler2&+1
Let Fehler&=@GetLastError()
ADDSTRING "Letzter API Fehler="+@STR$(Fehler&)
Let Zähler&=Zähler&+1
Wend
Dispose ACCOUNT_NAME#
Dispose SIZE_ACCOUNT#
Dispose Domain#
Dispose SIZE_DOMAIN#
Dispose SID_NAME_USE#
Dispose PSID#
Dispose Erforderlich#
LET FEHLER&=@CloseHandle(Token&)
ADDSTRING "Fehlercode Clo le=" +@ STR$(Fehler& )
@ EDITBOX("Rückgaben", 1)
[keywords:787e66d1bf] Security Token Access User data Information user groups Primäre group proprietor Owner privilege Privilegien manner Information group Login eingelogt eingelogter [/keywords:787e66d1bf] |
|