Delphi-PRAXiS
Seite 2 von 4     12 34      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi [Win2000] - Abmelden vom Dienst (https://www.delphipraxis.net/105291-%5Bwin2000%5D-abmelden-vom-dienst.html)

Dezipaitor 19. Dez 2007 19:33

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.

xZise 19. Dez 2007 20:50

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?

Dezipaitor 19. Dez 2007 20:57

Re: [Win2000] - Abmelden vom Dienst
 
Nein, der aktuelle Thread des Dienstes, gibt sich vorübergehend für jemand anderes aus - mit weniger Rechten usw.

xZise 19. Dez 2007 21:21

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

Dezipaitor 20. Dez 2007 10:18

Re: [Win2000] - Abmelden vom Dienst
 
Warum soll er das?

xZise 15. Apr 2008 15:45

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

Dezipaitor 15. Apr 2008 15:53

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.

xZise 15. Apr 2008 16:51

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

xZise 16. Apr 2008 21:27

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

xZise 28. Mär 2009 11:20

Re: [Win2000] - Abmelden vom Dienst
 
Zitat:

Zitat von xZise
[...]Ist natürlich doof, dass der Dienst sich lieber beenden sollte, wenn das zurückgschalten fehlschlägt[...]

Ha ich weiß jetzt wieder, warum ich das gesagt habe :)

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.
(Siehe hier)

Was mich wieder zur Frage zurückbringt. Ich habe das erstmal so implementiert:
Delphi-Quellcode:
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;
MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 Uhr.
Seite 2 von 4     12 34      

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