Benutzer aus Dienst anmelden
Hallo
ich verwende in meinem Programm CreateProcessWithLogonWrapper um einen Benutzer am System anzumelden um dessen Registry zu lesen. Das funktioniert prima, nur aus einem Systemdienst heraus funktioniert es nicht. Kann mir jemand sagen warum ? Und wie man es anstellt einen Benutzer aus einem Dienst anzumelden ? kuba |
Re: Benutzer aus Dienst anmelden
Damit meldest du keinen Benutzer angemeldet, sondern nur ein Prozess im Kontext eines bestimmten Benutzers gestartet. Willst du in einem Dienst einen Prozess unter einem anderem Benutzerkontex starten, kannst du CreateProcessAsUser benutzen.
|
Re: Benutzer aus Dienst anmelden
Hy,
und wie benutzt man das ? Wie komme ich an das usertoken ? Habe createprocessasuser schon in Benutzung:
Delphi-Quellcode:
Momentan erhalte ich das Usertoken aus der aktiven Session des Benutzers:
CreateProcessAsUser(
hUserToken, nil, PChar(CmdLine), // pointer to command line string nil, // pointer to process security attributes nil, // pointer to thread security attributes True, // handle inheritance 0, // creation flags nil, // pointer to new environment block nil, // pointer to current directory name SI, // STARTUPINFO PI); // PROCESS_INFORMATION
Delphi-Quellcode:
Mein Benutzer soll aber nicht am Desktop angemeldet sein...
if not f_WTSQueryUserToken(ActiveSessionID, hUserToken) then
begin ShowMessage('WTSQueryUserToken error ' + SysErrorMessage(GetLastError)); Exit; end; Ich hab auch mal CreateLogonAsUser ausprobiert, unter XP erhalte ich jedoch die Meldung "Zugriff verweigert" kuba |
Re: Benutzer aus Dienst anmelden
ich habs !
Delphi-Quellcode:
Ich bekomme die Anwendung zwar jetzt im Taskmanager zu sehen und sie wir auch unter dem gewünschten User ausgeführt, aber ich kann in der Registry leider keine SID des Benutzers entdecken. Was läuft denn noch falsch ?? :wiejetzt:
if not LogonUser(
PChar('user'), PChar('localhost'), PChar('passwort'), LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, token) then exit; ZeroMemory( @si, sizeof(si) ); si.lpDesktop:=PChar('MyOwnDesktop'); si.cb := sizeof(si); ZeroMemory( @pi, sizeof(pi) ); //cf:=CREATE_NEW or CREATE_NEW_CONSOLE; command:='notepad.exe'; try if not CreateProcessAsUser( token, nil, PChar(command), nil, nil, False, CREATE_NEW_CONSOLE, //cf, nil, PChar(ExtractFilePath(command)), si, pi )then exit; except exit; end; Muss es vielleicht CreateProcessInSession sein ? kuba |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:54 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz