Question

Sur le site de Microsoft (voir msdn.microsoft. com / fr-fr / bibliothèque / ms683502 (VS.85) .aspx ) il est dit clairement "Les services ne peuvent pas interagir directement avec un utilisateur à partir de Windows Vista".

Alors j'ai décidé de le tester en utilisant « psexec -s cmd.exe ». Pour autant que je sache, « psexec » crée un service afin d'ouvrir une invite de commande. Inutile de dire que cela a fonctionné. Je me suis alors décidé d'utiliser en combinaison « GUI EnumWinSta » avec psexec pour passer sur le bureau winlogon. À ma grande surprise, je ne pouvais même commencer « cmd.exe » sur ce bureau. Est-ce que cela signifie un nouveau processus créé à partir d'un service peut être interactif?

Ou est-ce parce psexec fait une sorte de magie noire? Si oui, comment faut-il faire?

Je suis en train d'afficher une fenêtre plein écran d'un service dans l'objet de bureau winlogon dans Vista ainsi que XP.

Était-ce utile?

La solution

code en cours d'exécution au sein d'un service ne peut pas interagir directement avec une session interactive.

Toutefois, le code en cours d'exécution en tant que service avec des privilèges suffisants peut créer un nouveau processus en cours d'exécution dans un bureau d'un utilisateur spécifique - obtenir le CreateProcessAsUser jeton et appelant de l'utilisateur de session interactive, par exemple

.

Vous pouvez utiliser WTSGetActiveConsoleSessionId pour obtenir la session de console active, la session de l'utilisateur qui est en fait sur la machine. WTSQueryUserToken peut alors être utilisé pour obtenir le jeton.

Votre service peut également utiliser les notifications de changement de session dans sa fonction de gestionnaire pour voir lorsque les utilisateurs ouvrent une session / fermeture de session, déverrouiller leur session, et ainsi de suite.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top