![]() |
Benutzerkennwort zurücksetzen
Hallo,
weiss jemand wie man ein Benutzerkennwort mit Delphi zurücksetzen kann ? mir fällt nur ein : net user Benutzer * aber dann müsste man 2 mal ENTER an das DOS-Fenster senden ... KUBA |
Re: Benutzerkennwort zurücksetzen
Es ist vielleicht nicht das Einfachsteste aber über control userpasswords2 gibts den Button "Kennwort zurücksetzen" vielleicht kannste den irgendwie "virtuell" drücken :) .
|
Re: Benutzerkennwort zurücksetzen
|
Re: Benutzerkennwort zurücksetzen
Und einen Delphi Wrapper für die von Dezipaitor genannte Funktion, gibt es bei mir in meiner Unit MpuNTUser.pas:
![]() |
Re: Benutzerkennwort zurücksetzen
Zitat:
KUBA |
Re: Benutzerkennwort zurücksetzen
Zitat:
KUBA |
Re: Benutzerkennwort zurücksetzen
Zitat:
![]() |
Re: Benutzerkennwort zurücksetzen
Zitat:
Delphi-Quellcode:
Wie verwende ich diese Funktion (mit Level 1003) um das Benutzerkennwort zu löschen bzw. zu setzen ?
//********************************************
//SET A USER INFO function SetUserInfo(fusername,fserver,ffulname,fcomment:string;FFlags,fuserID:dword):LongInt; var TheUser:Array[0..255] Of WideChar; TheServer:Array[0..255] Of WideChar; TheFullName:Array[0..255] Of WideChar; TheComment:Array[0..255] Of WideChar; MyInfo:USER_INFO_20; begin StringToWideChar(FUserName,@TheUser,255); StringToWideChar(FServer,@TheServer,255); StringToWideChar(FFullName,@TheFullName,255); StringToWideChar(FComment,@TheComment,255); MyInfo.usri20_name:=@TheUser; MyInfo.usri20_full_name:=@TheFullName; MyInfo.usri20_comment:=@TheComment; MyInfo.usri20_flags:=FFlags; MyInfo.usri20_user_id:=FUserID; Result:=NetUserSetInfo(@TheServer,@TheUser,20,@MyInfo,nil); end; //****************************************************************** Ich beschäftige mich zur Zeit mit einer Software die einen PC in den KIOSK - Modus versetzen soll. Dabei möchte ich aus einem Systemdienst heraus Informationen in die Registry meines "KIOSK-User" schreiben, ausserdem möchte ich dass der Systemdienst abcheckt ob der KIOSK-User eingeloggt ist. Falls dies der Fall ist soll der Systemdienst die KIOSK-Anwendung mit Benutzerrechten starten. Bisher verwende ich ein Hilfsprogramm dass bei der Benutzeranmeldung über Run-Key in der Registry gestartet wird, Registry Informationen kann ich jedoch nur importieren wenn mein KIOSK-Benutzer Administratorrechte hat. Daher kam mir die Idee, die Registryinformationen durch meinen Systemdienst in das Benutzerkonto zu schreiben, dann sind die Informationen schon vor dem einloggen im Profil und können sogar während der Laufzeit geändert werden. Wäre eine tolle Verbesserung für meine Software !! KUBA |
Re: Benutzerkennwort zurücksetzen
hier ein Beispiel für die Verwendung von NetUserSetInfo mit Level 1003 (Kennwort setzen):
Delphi-Quellcode:
(Server kann ein leerer String sein, sofern es sich um einen lokalen User handelt, für Domain-Users muss der Name eines DCs angegeben werden)
Function LM_NetUserSetServerPassword(Const Server,UserName,NewPassword : String) : Boolean;
Type TUserInfo_1003 = Packed Record Password : PWideChar; end; Const LM20_PWLEN = 20; Var BufServer : Array[0..63] Of WideChar; BufUsername : Array[0..63] Of WideChar; BufPassword : Array[0..LM20_PWLEN - 1] Of WideChar; UI1003 : TUserInfo_1003; Param_Err : DWORD; Res : NetAPIStatus; Begin StringToWideChar(Server,BufServer,Length(BufServer)); StringToWideChar(Username,BufUsername,Length(BufUsername)); StringToWideChar(NewPassword,BufPassword,Length(BufPassword)); UI1003.Password:=@BufPassword; Res:=NetUserSetInfo(BufServer,BufUsername,1003,@UI1003,Param_Err); Result:=(Res = NERR_Success); end; |
Re: Benutzerkennwort zurücksetzen
@Basilikum
thanx, probier ich aus ... langsam verstehe ich, geil :zwinker: Evtl. kann ich mein Problem lösen indem ich das Kennwort meines KIOSK-User immer komplett zurücksetzte (keins). Um Informationen in die Registry zu speichern könnte ich dem User ein Kennwort erteilen, ihn zur Gruppe "Administratoren" hinzufügen und dann mit "RunAs" die Informationen importieren. Anschliessend entferne ich den KIOSK-User wieder aus der Gruppe "Administratoren". So könnte ich meinem KIOSK-User nur "Benutzerrechte" erteilen und mit meinem "RunAs" die Informationen importieren (z.B. neue Startseite im Internet Explorer setzten). Cool, ich probier das mal aus, muss aber erstmal nach meinem Schatz schauen :cat: KUBA |
Re: Benutzerkennwort zurücksetzen
@Basilikum
Hy, leider kann ich den Code nicht fehlerfrei übersetzen, ich erhalte Fehlermeldungen: [Fehler] projekt.dpr(1414): E2003 Undefinierter Bezeichner: 'NetAPIStatus' [Fehler] projekt.dpr(1421): E2003 Undefinierter Bezeichner: 'NetUserSetInfo' [Fehler] projekt.dpr(1422): E2003 Undefinierter Bezeichner: 'NERR_Success' Wie muss ich die Bezeichner deklarieren ? KUBA |
Re: Benutzerkennwort zurücksetzen
die drei Bezeichner sind wie folgte definiert:
Delphi-Quellcode:
Const
NERR_Success = 0; Type NetAPIStatus = Integer; Function NetUserSetInfo(ServerName,UserName : PWideChar;Level : Integer;Const Buf : Pointer;Var Parm_Err : DWORD) : NetAPIStatus; StdCall; |
Re: Benutzerkennwort zurücksetzen
jetzt erhalte ich Fehlermeldung : [Fehler] watch.dpr(1565): E2029 ';' erwartet, aber '.' gefunden
ist das "end" richtig ?
Delphi-Quellcode:
kuba
Type
TUserInfo_1003 = Packed Record Password : PWideChar; end; |
Re: Benutzerkennwort zurücksetzen
Dann liegt der Fehler vorher im Quellcode
|
Re: Benutzerkennwort zurücksetzen
Zitat:
Wenn ich den Code wieder aus dem Projekt entferne funktionierts aber (wieder) ... Hier nochmal komplett:
Delphi-Quellcode:
KUBA
Const
NERR_Success = 0; Type NetAPIStatus = Integer; Function NetUserSetInfo(ServerName,UserName : PWideChar;Level : Integer; Const Buf : Pointer; Var Parm_Err : DWORD) : NetAPIStatus; StdCall; Function LM_NetUserSetServerPassword(Const Server,UserName,NewPassword : String) : Boolean; Type TUserInfo_1003 = Packed Record Password : PWideChar; end; Const LM20_PWLEN = 20; Var BufServer : Array[0..63] Of WideChar; BufUsername : Array[0..63] Of WideChar; BufPassword : Array[0..LM20_PWLEN - 1] Of WideChar; UI1003 : TUserInfo_1003; Param_Err : DWORD; Res : NetAPIStatus; Begin StringToWideChar(Server,BufServer,Length(BufServer)); StringToWideChar(Username,BufUsername,Length(BufUsername)); StringToWideChar(NewPassword,BufPassword,Length(BufPassword)); UI1003.Password:=@BufPassword; Res:=NetUserSetInfo(BufServer,BufUsername,1003,@UI1003,Param_Err); Result:=(Res = NERR_Success); end; |
Re: Benutzerkennwort zurücksetzen
Du solltest die Unit auch mal ordnen:
Delphi-Quellcode:
Const
... Type ... Var ... |
Re: Benutzerkennwort zurücksetzen
:coder2:
so ?
Delphi-Quellcode:
geht auch nicht, was macht das "end" ??
Const
NERR_Success = 0; Type NetAPIStatus = Integer; Function NetUserSetInfo(ServerName,UserName : PWideChar;Level : Integer; Const Buf : Pointer; Var Parm_Err : DWORD) : NetAPIStatus; StdCall; Function LM_NetUserSetServerPassword(Const Server,UserName,NewPassword : String) : Boolean; Const LM20_PWLEN = 20; Type TUserInfo_1003 = Packed Record Password : PWideChar; end; <<<<<---- dieses end !! Var BufServer : Array[0..63] Of WideChar; BufUsername : Array[0..63] Of WideChar; BufPassword : Array[0..LM20_PWLEN - 1] Of WideChar; UI1003 : TUserInfo_1003; Param_Err : DWORD; Res : NetAPIStatus; Begin ..... |
Re: Benutzerkennwort zurücksetzen
gehört zum record
|
Re: Benutzerkennwort zurücksetzen
Alle Konstanten unter Const
Alle Typen unter Type Alle Variablen unter Var |
Re: Benutzerkennwort zurücksetzen
:gruebel:
will aber nich ...
Delphi-Quellcode:
Type
NetAPIStatus = Integer; Function NetUserSetInfo(ServerName,UserName : PWideChar;Level : Integer; Const Buf : Pointer; Var Parm_Err : DWORD) : NetAPIStatus; StdCall; Function LM_NetUserSetServerPassword(Const Server,UserName,NewPassword : String) : Boolean; Const NERR_Success = 0; LM20_PWLEN = 20; Type TUserInfo_1003 = Packed Record Password : PWideChar; end; Var BufServer : Array[0..63] Of WideChar; BufUsername : Array[0..63] Of WideChar; BufPassword : Array[0..LM20_PWLEN - 1] Of WideChar; UI1003 : TUserInfo_1003; Param_Err : DWORD; Res : NetAPIStatus; Begin ..... |
Re: Benutzerkennwort zurücksetzen
Red ich gegen eine Wand :wall:
|
Re: Benutzerkennwort zurücksetzen
Zitat:
[Fehler] projekt.dpr(1565): E2029 ';' erwartet, aber '.' gefunden aber dies muss doch "oben" stehen ...
Delphi-Quellcode:
KUBA
Type
NetAPIStatus = Integer; |
Re: Benutzerkennwort zurücksetzen
so, nochmal :
Delphi-Quellcode:
geht aber auch nicht :roteyes:
Const
NERR_Success = 0; LM20_PWLEN = 20; Type NetAPIStatus = Integer; TUserInfo_1003 = Packed Record Password : PWideChar; end; Var BufServer : Array[0..63] Of WideChar; BufUsername : Array[0..63] Of WideChar; BufPassword : Array[0..LM20_PWLEN - 1] Of WideChar; UI1003 : TUserInfo_1003; Param_Err : DWORD; Res : NetAPIStatus; Function NetUserSetInfo(ServerName,UserName : PWideChar;Level : Integer; Const Buf : Pointer; Var Parm_Err : DWORD) : NetAPIStatus; StdCall; Function LM_NetUserSetServerPassword(Const Server,UserName,NewPassword : String) : Boolean; Begin StringToWideChar(Server,BufServer,Length(BufServer)); StringToWideChar(Username,BufUsername,Length(BufUsername)); StringToWideChar(NewPassword,BufPassword,Length(BufPassword)); UI1003.Password:=@BufPassword; Res:=NetUserSetInfo(BufServer,BufUsername,1003,@UI1003,Param_Err); Result:=(Res = NERR_Success); end; KUBA |
Re: Benutzerkennwort zurücksetzen
Du solltest Function NetUserSetInfo auch implementieren oder zumindest einen begin..end-Block einfügen
|
Re: Benutzerkennwort zurücksetzen
die Funktion NetUserSetInfo ist eine API und liegt in einer DLL:
Delphi-Quellcode:
(das "External..." habe ich vorhin vergessen mitzukopieren)
Function NetUserSetInfo(ServerName,UserName : PWideChar;Level : Integer; Const Buf : Pointer; Var Parm_Err : DWORD) : NetAPIStatus; StdCall; External 'NETAPI32.DLL';
|
Re: Benutzerkennwort zurücksetzen
Dann sollte diese aber in das Interface
|
Re: Benutzerkennwort zurücksetzen
so gehts :dancer:
Delphi-Quellcode:
Type
NetAPIStatus = Integer; Function NetUserSetInfo(ServerName,UserName : PWideChar;Level : Integer; Const Buf : Pointer; Var Parm_Err : DWORD) : NetAPIStatus; StdCall; External 'NETAPI32.DLL'; Function LM_NetUserSetServerPassword(Const Server,UserName,NewPassword : String) : Boolean; Const NERR_Success = 0; LM20_PWLEN = 20; Type TUserInfo_1003 = Packed Record Password : PWideChar; end; Var BufServer : Array[0..63] Of WideChar; BufUsername : Array[0..63] Of WideChar; BufPassword : Array[0..LM20_PWLEN - 1] Of WideChar; UI1003 : TUserInfo_1003; Param_Err : DWORD; Res : NetAPIStatus; Begin StringToWideChar(Server,BufServer,Length(BufServer)); StringToWideChar(Username,BufUsername,Length(BufUsername)); StringToWideChar(NewPassword,BufPassword,Length(BufPassword)); UI1003.Password:=@BufPassword; Res:=NetUserSetInfo(BufServer,BufUsername,1003,@UI1003,Param_Err); Result:=(Res = NERR_Success); end; |
Re: Benutzerkennwort zurücksetzen
Zitat:
KUBA |
Re: Benutzerkennwort zurücksetzen
Moin Kuba,
Du hast nicht zufällig mal auf den Link geklickt, den Basilikum da gepostet hat... ;-) |
Re: Benutzerkennwort zurücksetzen
Hy,
wenn ich das richtig sehe gibt es unterschiedlche "Strukturen" für NetUserSetInfo, z.B.: The USER_INFO_1011 structure contains the full name of a network user. Level 1011 enthält den "full name" of a network user - sehe ich das richtig ? Kann man "RunAs" auch mit Level 1003 (ohne Kennwort) ausführen ? KUBA |
Re: Benutzerkennwort zurücksetzen
Was hat jetzt da seine mit dem anderen zu tun? Willst du Programme unter einem anderem Benutzerkonto ausführen mit dem Konsolenprogramm RunAs zum beispiel, muss zum einen der Dienst "Sekundäre Anmeldung" laufen und das betreffende Konto muss mit einem Passwort versehen sein.
|
Re: Benutzerkennwort zurücksetzen
Hy,
mit diesem Code hatte ich es schon mal am laufen:
Delphi-Quellcode:
Jetzt habe ich den Code wieder in mein Projekt eingefügt und erhalte : [Fehler] projekt.dpr(1635): E2010 Inkompatible Typen: 'PStartupInfoW' und '_STARTUPINFOW'
function CreateProcessAsLogon(const User, PW, Application, CmdLine: WideString):
Boolean; var si : TStartupInfoW; pif : TProcessInformation; begin ZeroMemory(@si, sizeof(TStartupInfo)); si.cb := SizeOf(TStartupInfoW); si.dwFlags := STARTF_USESHOWWINDOW; si.wShowWindow := 1; Result := CreateProcessWithLogonW(PWideChar(User), nil, PWideChar(PW), LOGON_WITH_PROFILE, nil, PWideChar(Application +' '+CmdLine), CREATE_DEFAULT_ERROR_MODE, nil, nil, si, pif); end; KUBA |
Re: Benutzerkennwort zurücksetzen
jetzt funktionierts, irgendetwas war mit den Units nicht OK...
der Code funzt leider doch nicht richtig, aber ich hab jetzt endlich eine Möglichkeit gefunden ..
Delphi-Quellcode:
:roll:
if LogonUser(PAnsiChar(USERNAME), // UserName
PAnsiChar(''), // Domäne oder lokaler Rechner PAnsiChar('Passwort'), // Password LOGON32_LOGON_BATCH or LOGON32_LOGON_NETWORK or LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, AdminToken) then begin if ImpersonateLoggedOnUser(AdminToken) then begin // hier kommt Dein Prog.-Code hin winexec('notepad.exe',SW_SHOW); RevertToSelf; // zurückschalten zum angemeldeten Benutzer end; end; KUBA |
Re: Benutzerkennwort zurücksetzen
Zitat:
danke nochmal für die Tip´s !! :angel: Ich habs mit einem Zusammenspiel der o.g. Codes hinbekomen. Über den Service erteile ich bei Bedarf meinem User Admin-Rechte und starte dann mit RunAs aus meinem Hilfsprogramm den Informationsimport. Klappt prima und ist schön kompatibel, so habe ich meine Software wirklich stark verbessert !!! Jetzt muss ich unbedingt mal durchforsten und aufräumen :mrgreen: KUBA PS: Wer Lust hat kann meine Software mal testen, aber auf eigene Gefahr :mrgreen: Nee, funktioniert schon, nur wenn ein Bug drin ist kanns schonmal heikel werden ... ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:29 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz