Domanda

Dal sito Web di Microsoft (vedi msdn.microsoft. com / it-it / library / ms683502 (VS.85) aspx ) si dice chiaramente "I servizi non possono interagire direttamente con un utente come di Windows Vista".

Così ho deciso di provare questo utilizzando "psexec -s cmd.exe". Per quanto ne so, "psexec" crea un servizio al fine di aprire un prompt dei comandi. Inutile dire che ha funzionato. Ho quindi deciso di usare "EnumWinSta GUI", in combinazione con psexec per passare al desktop winlogon. Con mia grande sorpresa, ho potuto anche cominciare "cmd.exe" su questo desktop. Questo significa un nuovo processo creato da un servizio può essere interattivo?

O è perché psexec fa una sorta di magia nera? Se è così come si fa?

Sto cercando di visualizzare una finestra a schermo intero da un servizio nell'oggetto winlogon desktop in Vista e XP.

È stato utile?

Soluzione

codice in esecuzione all'interno di un servizio non può interagire direttamente con una sessione interattiva.

Tuttavia, il codice in esecuzione come un servizio con privilegi sufficienti in grado di creare un nuovo processo in esecuzione all'interno del desktop di un utente specifico - sempre token e chiamando CreateProcessAsUser dell'utente della sessione interattiva, ad esempio

.

È possibile utilizzare WTSGetActiveConsoleSessionID per ottenere la sessione della console attiva, la sessione dell'utente che è in realtà sulla macchina. WTSQueryUserToken può quindi essere utilizzato per ottenere il token.

Il servizio può anche utilizzare le notifiche di modifica della sessione nella sua funzione di gestore di vedere quando gli utenti accesso / fine sessione, sblocca la loro sessione, e così via.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top