|
Beschreibung:
Die API LookupAccountName ermittelt aus dem Accountnamen und dem Namen des Systems den dazugehörigen SID (Security Identifier). Diese API gibt es nur unter NT-basierten Windowssystemen.
Deklaration:
DEF @LookupAccountName(7) !advapi32,LookupAccountNameA
Parameter:
1.Parameter: Adresse des Strings, der den Systemnamen enthält oder 0 für den aktuellen Computer. 2.Parameter: Adresse des Strings, der den Accountnamen enthält. 3.Parameter: Eine ausreichend große Bereichsvariable, die den SID aufnimmt. 4.Parameter: Eine vier Byte große Bereichsvariable, in der die Größe des in Parameter 3 angegebenen Bereichs steht. 5.Parameter: Eine ausreichend große Bereichsvariable, die den Domainnamen aufnimmt, auf dem der Accountname gelistet ist. 6.Parameter: Eine vier Byte große Bereichsvariable, in der die Größe des in Parameter 5 angegebenen Bereichs steht. 7.Parameter: SID_NAME_USE Struktur oder 4 Byte große Bereichsvariable, die einen Flag für die Art des Accounts aufnimmt, wenn die Funktion zurückkehrt..=> $1 = Username (SidTypeUser) $2 = Gruppenname (SidTypeGroup) $3 = Domain (SidTypeDomain) $4 = SidTypeAlias $5 = SidTypeWellKnownGroup $6 = Gelöschter Account (SidTypeDeletedAccount) $7 = SidTypeInvalid $8 = SidTypeUnknown
Rückgabewert:
1 Bei Erfolg, 0 bei Fehler.
Beispiele:
DEF @LookupAccountName(7) !"advapi32","LookupAccountNameA"
DEF @LogonUser(6) !"advapi32","LogonUserA"
DEF @CreateProcessAsUser(11) !"advapi32","CreateProcessAsUserA"
DEF @SetLastError(1) !"kernel32","SetLastError"
DEF @GetLastError(0) !"kernel32","GetLastError" Liefert letzten API Fehler.
DEF @ZeroMemory(2) ! "Kernel32","RtlZeroMemory"
DEF @CloseHandle(1) !"kernel32","CloseHandle" Schließt ein Handle (Programm).
DEF @CreateProcessWithLogonW(11) !"advapi32","CreateProcessWithLogonW"
DEF @MultiByteToWideChar(6) !"kernel32","MultiByteToWideChar"
DEF @GetACP(0) !"kernel32","GetACP"
Declare Protokoll&,FEHLER&,DOMAIN$,SID_Size#,lpStartupInfo#,lpProcessInformation#
Declare lpCommandLine#,DOMAINNAME_SIZE_ADDR#
Declare SID#,DOMAIN#,SID_TYPE_INDICATOR#,DOMAIN#,Attribut#,ALLPRIVS#,COUNT#,SID#
DIM DOMAIN#,256
DIM SID#,800
DIM SID_Size#,4
DIM DOMAINNAME_SIZE_ADDR#,4
DIM SID_TYPE_INDICATOR#,256
Proc StartWithUserRights
@ADDSTRING(Protokoll&,"Start der Prozedur zum Impersonifizieren anderer User")
Parameters PUSERNAME$,PPASSWORT$,PPROGRAMM$
Declare PUSERNAME#,PPASSWORT#,PPROGRAMM#,Domainw#
CLEAR SID#,DOMAIN#,SID_TYPE_INDICATOR#,DOMAIN#,SID#,DOMAINNAME_SIZE_ADDR#
Long SID_Size#,0=800
LONG DOMAINNAME_SIZE_ADDR#,0=255
LET Fehler&=@LookupAccountName(0,@addr(PUSERNAME$),SID#,SID_Size#,DOMAIN#,DOMAINNAME_SIZE_ADDR#,SID_TYPE_INDICATOR#)
@ADDSTRING(Protokoll&,"Fehler LookupAccountName: "+@str$(Fehler&))
LET DOMAIN$=@STRING$(DOMAIN#,0)
@ADDSTRING(Protokoll&,"Domain: "+DOMAIN$)
LET PPROGRAMM$=@ShortName$(PPROGRAMM$)
DIM PPROGRAMM#,(@LEN(PPROGRAMM$)*2)+1
DIM PUSERNAME#,(@LEN(PUSERNAME$)*2)+1
DIM PPASSWORT#,(@LEN(PPASSWORT$)*2)+1
DIM Domainw#,(@LEN(Domain$)*2)+1
LET Fehler&=@MultiByteToWideChar(@GetACP(),2,@addr(PPROGRAMM$),-1,PPROGRAMM#,(@LEN(PPROGRAMM$)*2)+1)
@ADDSTRING(Protokoll&,"Rückgabe von MultiByteToWideChar: "+@STR$(Fehler&))
LET Fehler&=@MultiByteToWideChar(@GetACP(),2,@addr(Domain$),-1,Domainw#,(@LEN(Domain$)*2)+1)
@ADDSTRING(Protokoll&,"Rückgabe von MultiByteToWideChar: "+@STR$(Fehler&))
LET Fehler&=@MultiByteToWideChar(@GetACP(),2,@addr(PUSERNAME$),-1,PUSERNAME#,(@LEN(PUSERNAME$)*2)+1)
@ADDSTRING(Protokoll&,"Rückgabe von MultiByteToWideChar: "+@STR$(Fehler&))
LET Fehler&=@MultiByteToWideChar(@GetACP(),2,@addr(PPASSWORT$),-1,PPASSWORT#,(@LEN(PPASSWORT$)*2)+1)
@ADDSTRING(Protokoll&,"Rückgabe von MultiByteToWideChar: "+@STR$(Fehler&))
@SetLastError(0)
@ADDSTRING(Protokoll&,"Letzter API Fehler: "+@str$(@GetLastError()))
Dim lpStartupInfo#,68
ZeroMemory(lpStartupinfo#,68)
Long lpStartupInfo#,0=68
Dim lpProcessInformation#,16
Dim lpCommandLine#,@len(PPROGRAMM$)+1
ZeroMemory(lpProcessInformation#,16)
String lpCommandLine#,0=PPROGRAMM$
@CreateProcessWithLogonW(PUSERNAME#,Domainw#,PPASSWORT#,0,0,PPROGRAMM#,0,0,0,lpStartupInfo#,lpProcessInformation#)
@ADDSTRING(Protokoll&,"Letzter API Fehler: "+@str$(@GetLastError()))
Dispose Domainw#
Dispose PPROGRAMM#
Dispose PUSERNAME#
Dispose PPASSWORT#
Dispose lpStartupInfo#
Dispose lpProcessInformation#
Dispose lpCommandLine#
@ADDSTRING(Protokoll&,"Ende der Prozedur zum Impersonifizieren anderer User")
ENDPROC
CLS
LET Protokoll&=@createlistbox(%HWND,"",10,10,600,400)
StartWithUserRights @INPUT$("Bitte einen Usernamen eingeben: ","Login Name?",""),@INPUT$("Bitte das Passwort dazu eingeben: ","Passwort?",""),,@LoadFile$("EXE auswählen","*.EXE")
Dispose DOMAIN#
Dispose SID_Size#
Dispose DOMAINNAME_SIZE_ADDR#
Dispose SID_TYPE_INDICATOR#
Dispose SID#
Waitinput
[keywords:9dad938fef] SID Security Identifier Nutzer Benutzer Domain ermitteln herausbekommen erfahren Gruppe Gruppen Groups Usernamen Accountnamen Account User String Text [/keywords:9dad938fef] |
|