Delphi-PRAXiS
Seite 3 von 5     123 45      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Angemeldeten Benutzer aus Dienst ermitteln (https://www.delphipraxis.net/104153-angemeldeten-benutzer-aus-dienst-ermitteln.html)

xZise 10. Dez 2007 09:53

Re: Angemeldeter Benutzer aus Dienst ermitteln
 
Okay :(
Aber er kompliert nur JwaWindows und JwaVista.
Aber ich benötige wegen den Tokens andere dcus.

MfG
xZise

Dezipaitor 10. Dez 2007 12:56

Re: Angemeldeter Benutzer aus Dienst ermitteln
 
Zitat:

Zitat von xZise
Okay :(
Aber er kompliert nur JwaWindows und JwaVista.
Aber ich benötige wegen den Tokens andere dcus.

MfG
xZise

Die JWSCL verwendet die JEDI API für die API Aufrufe.
Um z.b. Token nutzen zu können verwendest du die Unit JwsclToken, die in "...\jedi-api-lib\jwscl\trunk\source" liegt.

Diesen Pfad kannst du auch in den globalen Suchpfad von Delphi eintragen. Im Gegensatz zur JWA verwendet die JWSCL keine
Pakete, da es sich hier nicht lohnt DCU Dateien zu verwenden. Sie wird einfach zu oft aktualisiert.

xZise 11. Dez 2007 06:59

Re: Angemeldeter Benutzer aus Dienst ermitteln
 
Hmmm....

Er gibt eine Fehlermeldung aus, dass der Explorer.exe Prozess nicht gefunden wurde.
Natürlich gibt es den nicht als Starter des Dienstes, aber wenn ich das Aufrufe gibt es eine Explorer.exe ;)

MfG
xZise

DP-Maintenance 11. Dez 2007 07:07

DP-Maintenance
 
Dieses Thema wurde von "SirThornberry" von "Object-Pascal / Delphi-Language" nach "Windows API / MS.NET Framework API" verschoben.

Dezipaitor 11. Dez 2007 16:02

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Ich verstehe nicht, warum das ein Problem der JWSCL sein soll?!

xZise 11. Dez 2007 16:21

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Naja? Wenn ich das Token "lade", bekomme ich den Fehler dass keine Explorer.exe gestartet ist?
Allerdings ist dem nicht so ...
Also weiß ich nicht, warum die JWSCL einen Fehler wirft und deshalb kein Ergebnis liefert.

MfG
xZise

Dezipaitor 11. Dez 2007 16:31

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Axo jetzt verstehe ich. Du verwendest CreateCompatibilityQueryUserToken .

Natürlich gibt es kein Explorer.exe, wenn kein Benutzer eingeloggt ist, oder dein Dienst sich nicht in der Session eines angemeldeten Benutzers liegt.

Du kannst es natürlich mit try/except abfangen. Viele Methoden werfen Exceptions.

xZise 11. Dez 2007 16:50

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Zitat:

Zitat von Dezipaitor
Axo jetzt verstehe ich. Du verwendest CreateCompatibilityQueryUserToken .

Natürlich gibt es kein Explorer.exe, wenn kein Benutzer eingeloggt ist, oder dein Dienst sich nicht in der Session eines angemeldeten Benutzers liegt.

Das ist ja so ne besonderheit des Dienstes, dass er normalerweise immer läuft xD

Zitat:

Zitat von Dezipaitor
Du kannst es natürlich mit try/except abfangen. Viele Methoden werfen Exceptions.

Naja, aber wenn ich Dienst über /install installiere nützt mir dann diese Funktion ja wenig.
Oder könnte man die Tokens der Explorer.exe herausfinden? Weil unter Windows 2000 konnte sich ja nur ein Benutzer anmelden...

MfG
xZise

PS: Läuft die Explorer.exe eigentlich auch, wenn niemand angemeldet ist?

Dezipaitor 11. Dez 2007 18:08

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Zitat:

Zitat von xZise
Naja, aber wenn ich Dienst über /install installiere nützt mir dann diese Funktion ja wenig.

Installieren und Starten ist ein Unterschied.

Zitat:

Zitat von xZise
Oder könnte man die Tokens der Explorer.exe herausfinden? Weil unter Windows 2000 konnte sich ja nur ein Benutzer anmelden...

CreateCompatibilityQueryUserToken macht genau das. Dieser Konstruktor darf in einem Dienst nur in Windows2000 aufgerufen werden.
Zitat:

Zitat von xZise
PS: Läuft die Explorer.exe eigentlich auch, wenn niemand angemeldet ist?

[/quote]
Er schlägt natürlich fehl, wenn keiner eingeloggt ist, weil dann der Explorer.exe Prozess nicht existiert.
Du kannst erst dann das UserToken unter Win2000 bekommen, wenn ein Benutzer sich angemeldet hat und Explorer.exe existiert.

Für WindowsXP/2003 und neuer verwende auf jeden Fall den Konstruktor CreateWTSQueryUserToken.

xZise 11. Dez 2007 21:45

Re: Angemeldeten Benutzer aus Dienst ermitteln
 
Zitat:

Zitat von Dezipaitor
Zitat:

Zitat von xZise
Oder könnte man die Tokens der Explorer.exe herausfinden? Weil unter Windows 2000 konnte sich ja nur ein Benutzer anmelden...

CreateCompatibilityQueryUserToken macht genau das. Dieser Konstruktor darf in einem Dienst nur in Windows2000 aufgerufen werden.

Aber anscheinend tut er das nicht korrekt, oder er muss als root-Element die Explorer.exe haben, was aber sinnlos wäre (oder nicht?), weil man damit ja auch die eigenen Tokens kennt?!

Zitat:

Zitat von Dezipaitor
Zitat:

Zitat von xZise
PS: Läuft die Explorer.exe eigentlich auch, wenn niemand angemeldet ist?

Er schlägt natürlich fehl, wenn keiner eingeloggt ist, weil dann der Explorer.exe Prozess nicht existiert.
Du kannst erst dann das UserToken unter Win2000 bekommen, wenn ein Benutzer sich angemeldet hat und Explorer.exe existiert.

Naja, aber der Benutzer ist ja angemeldetet.

Zitat:

Zitat von Dezipaitor
Für WindowsXP/2003 und neuer verwende auf jeden Fall den Konstruktor CreateWTSQueryUserToken.

Betriebssystem ist aber nicht Windows XP oder höher!

Also folgern wir daraus, dass ein installierter Dienst unter Windows 2000 mithilfe von CreateCompatibilityQueryUserToken nicht den (?) Token des angemeldeten Benutzers herausfinden kann?

Mensch ist das geil xD Gerade das Betriebssystem, welches nur einen Benutzer unterstützt, kann nicht den Benutzernamen oder Adminrechte zurückgeben?
Da sollte es doch besser funktionieren, weil es nur einen geben kann, also es nur 2 Fälle gibt: Angemeldet/Abgemeldet

MfG
xZise


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:17 Uhr.
Seite 3 von 5     123 45      

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