![]() |
Re: [Win2000] - Abmelden vom Dienst
unter Windows 2000 muss man über einen Prozess das Token des Benutzers erfahren (TJwSecurityToken.CreateCompatibilityQueryUserToke n).
Man kann das Token dann sofort personifizieren (impersonate), da jeder Prozess mindestens ein Thread besitzt. |
Re: [Win2000] - Abmelden vom Dienst
Dann würde also der Dienst zu einen Prozess des Benutzers? Oder wie sage ich, dass ein anderer Prozess ein Benutzer gehört?
|
Re: [Win2000] - Abmelden vom Dienst
Nein, der aktuelle Thread des Dienstes, gibt sich vorübergehend für jemand anderes aus - mit weniger Rechten usw.
|
Re: [Win2000] - Abmelden vom Dienst
Ah Okay...
Ist natürlich doof, dass der Dienst sich lieber beenden sollte, wenn das zurückgschalten fehlschlägt ... MfG xZise |
Re: [Win2000] - Abmelden vom Dienst
Warum soll er das?
|
Re: [Win2000] - Abmelden vom Dienst
Ich weiß zwar nicht mehr sogenau, warum ich das gesagt habe ;)
Aber eigentlich habe ich da eine Frage: Wie lange bin ich der andere Benutzer? Und sind Dienste vom abmelden betroffen, wenn diese im Kontext des abmeldenden Benutzers ausgeführt werden? MfG xZise |
Re: [Win2000] - Abmelden vom Dienst
Das Tokenhandle ist unabhängig von der interaktiven Anmeldung. Solange ein Handle auf ein Token besteht, solange bleibt das Token erhalten. Da kann der Benutzer sich 50x abmelden.
Gehe aber nicht davon aus, dass Netzwerklaufwerke oder andere Resourcen verfügbar sind. Das Benutzerprofil könnte auch entladen werden. Die Registrykeys müssen mit LoadUserProfile extra geladen werden. |
Re: [Win2000] - Abmelden vom Dienst
Naja, ich möchte eigentlich nur den aktuell angemeldeten Benutzer abmelden, also so, als würde er auf Start klciken und "Abmelden" anwählen.
Und wie komme ich mit den TJwSecurityToken an das Token zum Impersonisieren? MfG xZise |
Re: [Win2000] - Abmelden vom Dienst
Also ich wüsste schon gerne, wie ich es hinkriege, dass ich als installierter Service unter den Benutzer "NT-Autorität" den aktuell aktiven Benutzer abmelden kann ;)
MfG xZise |
Re: [Win2000] - Abmelden vom Dienst
Zitat:
Ein Prozess unter einem anderem Benutzer ausführen - Teil 1 Impersonate Mit der Funktion RevertToSelf wird die Verkörperung eines anderen Benutzers wieder aufgehoben. Aus Sicherheitsgründen sollte man den Prozess beenden, wenn diese Funktion fehlschlägt, da sonst der Prozess weiter unter den Benutzerrechten des anderen Benutzers ausgeführt wird. ![]() Was mich wieder zur Frage zurückbringt. Ich habe das erstmal so implementiert:
Delphi-Quellcode:
MfG
token := TJwSecurityToken.CreateWTSQueryUserToken(TOKEN_ALL_ACCESS);
try if ImpersonateLoggedOnUser(token.TokenHandle) then begin vi.dwOSVersionInfoSize:=SizeOf(vi); GetVersionEx(vi); if vi.dwPlatformId = VER_PLATFORM_WIN32_NT then // Windows NT begin OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES,hToken); LookupPrivilegeValue(nil,'SeShutdownPrivilege',tp.Privileges[0].Luid); tp.PrivilegeCount := 1; tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; h := 0; AdjustTokenPrivileges(hToken,False,tp,0,PTokenPrivileges(nil)^,h); CloseHandle(hToken); Result := ExitWindowsEx(flag,0); end; end; finally token.Free; end; xZise |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:56 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