|
Beschreibung:
GetTokenInformation liest aus dem Access Token eines eingelogten Users Informationen aus (u.a. über diesen User). Diese Funktion gibt es nur unter NT-basierten Windowssystemen.
Deklaration:
DEF @GetTokenInformation(5) !advapi32,GetTokenInformation
Parameter:
1.Parameter: Handle des Access Token. Das Handle muß TOKEN_QUERY ($8) Zugriffrechte haben. Soll die Quelle des Tokens ermittelt werden, ist auch TOKEN_QUERY_SOURCE Access nötig ($10). 2.Parameter: Ein TOKEN_INFORMATION_CLASS Flag, der angibt welche Informationen ausgelesen werden sollen. => -$1 = Ermittelt den Usernamen (den SID des Users) aus dem Token (TokenUser) -$2 = Ermittelt die Gruppen (SID’s der Gruppen), in denen der User Mitglied ist (TokenGroups). -$3 = Ermittelt die Privilegien (LUID’s) und deren Attribute, über die der User verfügt (TokenPrivileges). -$4 = Ermittelt den User oder die Gruppe (SID), die beim Erstellen von Objekten als Eigentümer eingetragen wird (TokenOwner). -$5 = Ermittelt die Primäre Gruppe (SID) des Users (TokenPrimaryGroup). -$6 = Ermittelt den DACL, der beim Erzeugen von Objekten durch den User als Standard verwendet wird (TokenDefaultDacl). -$7 = Ermittelt die Quelle eines Token (TokenSource). -$8 = Ermittelt den Typ des Token (TokenType). -$9 = Ermittelt den Security Impersonation Level eines Impersonation Token (TokenImpersonationLevel).). -$10 = Ermittelt Daten über die ID des Token (TokenId), die ID der Session (AuthenticationId), den Typ des Token, den Impersonation Level eines Imoersonation Token (ImpersonationLevel), den verwendeten Speicherplatz (DynamicCharged), die Anzahl der Gruppen im Token (GroupCount), die Anzahl der Privilegien im Token (PrivilegeCount) und über die letzte Veränderung des Token (ModifiedId). 3.Parameter: Eine Bereichsvariable, die die angefragten Daten aufnimmt: Wenn Parameter 2 $1 ist, ist dieser Parameter eine 8 Byte große TOKEN_USER Struktur.=> -Bytes 0-3 = Adresse des SID des Users, den der Token personifiziert. -Bytes 4-7 = Flags für die Attribute des SID’s des Users, zur Zeit nicht genutzt. Wenn Parameter 2 $2 ist, ist dieser Parameter eine TOKEN_GROUPS Struktur, die aus einem Array aus SID_AND_ATTRIBUTES Strukturen und der Anzahl der Gruppen besteht: -Byte 0-3 = Anzahl der Gruppen in dem Array. -Byte 4-7 = Adresse des SID’s der 1.Gruppe. -Byte 8-11 = Flags für die Attribute des SID’s der 1. Gruppe: $1 = Gruppe kann nicht gelöscht werden (SE_GROUP_MANDATORY). $2 = Gruppe ist standardmäßig aktiviert (SE_GROUP_ENABLED_BY_DEFAULT). $4 = Gruppe ist aktiv (SE_GROUP_ENABLED). $8 = Gruppe kann ein Eigentümer von Objekten sein (SE_GROUP_OWNER). $C0000000 = Gruppe ist ein Logonname (SE_GROUP_LOGON_ID). -Byte 12-15 = Adresse des SID’s der 2.Gruppe. -Byte 16-19 = Flags für die Attribute des SID’s der 2. Gruppe -.... Wenn Parameter 2 $3 ist, ist dieser Parameter eine 4 Byte große TOKEN_Owner Struktur.=> -Byte 0-3 = Anzahl der Privilegien in dem Array. -Byte 4-11 = LUID des 1.Privilegs. -Byte 12-15 = Flags für die Attribute des 1.Privilegs: $0 = Privileg ist deaktiviert. $1 = Privileg ist standardmäßig aktiviert. $2 = Privileg ist aktiviert. $80000000 = Privileg wurde zum Zugriff benutzt. -Byte 16-23 = LUID des 2.Privilegs. -Byte 24-27 = Flags für die Attribute des 2.Privilegs: -.... Wenn Parameter 2 $4 ist, ist dieser Parameter eine 4 Byte große TOKEN_OWNER Struktur.=> -Byte 0-3 = Adresse des SID’s des Users oder der Gruppe, die beim Erstellen von Objekten als Eigentümer eingetragen wird. Wenn Parameter 2 $5 ist, ist dieser Parameter eine 4 Byte große TOKEN_PRIMARY_GROUP Struktur.=> -Byte 0-3 = Adresse des SID’s der Primären Gruppe des Users. Wenn Parameter 2 $6 ist, ist dieser Parameter eine 4 Byte große TOKEN_DEFAULT_DACL Struktur.=> -Byte 0-3 = Adresse des DACL’s, der beim Erzeugen von Objekten durch den User als Standard verwendet wird. Wenn Parameter 2 $7 ist, ist dieser Parameter eine 16 Byte große TOKEN_SOURCE Struktur.=> -Byte 0-7 = 8 Byte großer Charakterstring, der die Quelle des Token angibt. -Byte 8-15 = LUID der Quelle des Token. Wenn Parameter 2 $8 ist, ist dieser Parameter eine 4 Byte große TOKEN_TYPE Struktur, deren LongInt Wert die Art des Token angibt.=> -$1 = Primärer Token (TokenPrimary). -$2 = Impersonation Token (TokenImpersonation) Wenn Parameter 2 $9 ist, ist dieser Parameter eine 4 Byte große SECURITY_IMPERSONATION_LEVEL Struktur, deren LongInt Wert den Impersonation Level des Token angibt, wenn dieser ein Impersonation Token ist. => -$1 = SecurityAnonymous -$2 = SecurityIdentification -$3 = SecurityImpersonation -$4 = SecurityDelegation Wenn Parameter 2 $10 ist, ist dieser Parameter eine 52 Byte große TOKEN_STATISTICS Struktur.=> -Byte 0-7 = LUID, der deie ID des Token repräsentiert. -Byte 8-15 = LUID, der die Session repräsentiert. -Byte 16-19 = Ablaufzeit des Token. Zur Zeit nicht unterstützt. -Byte 20-23 = Flag für die Art des Token. $1 = Primärer Token (TokenPrimary). $2 = Impersonation Token (TokenImpersonation) -Byte 24-27 = Impersonation Level des Token, wenn dieser ein Impersonation Token ist. $1 = SecurityAnonymous $2 = SecurityIdentification $3 = SecurityImpersonation $4 = SecurityDelegation -Byte 28-31 = Die Anzahl der Bytes, die zum Speichern von Primärer Gruppe und DACL reserviert sind. -Byte 32-35 = Die Anzahl der Bytes, die im reservierten Speicherbereich von Primärer Gruppe und DACL noch frei sind. -Byte 36-39 = Anzahl der Gruppen im Token als LongInt. -Byte 40-43 = Anzahl der Privilegien im Token als LongInt. -Byte 44-51 = LUID der sich jedes Mal ändert, wenn sich etwas im Token verändert. 4.Parameter: Die größe in Bytes des Bereichs aus Parameter 3. 5.Parameter: 4 Byte Bereichsvariable, die die Anzahl der für Parameter 3 benötigten Bytes aufnimmt. Ist diese Zahl größer als Parameter 4, werden keine Daten in Parameter 3 übertragen und die Funktion schlägt fehl.
Rückgabewert:
1 bei Erfolg, 0 bei Fehler.
Beispiele:
KompilierenMarkierenSeparierenDEF @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 CloseHandle="+@STR$(Fehler&)
@EDITBOX("Rückgaben",1)
[keywords:787e66d1bf] Security Token Access User Daten Informationen Benutzer Gruppen Primäre Gruppe Eigentümer Owner Privileg Privilegien Art Informationen Gruppe Login eingelogt eingelogter [/keywords:787e66d1bf] |
|