2014-05-20 23 views
5

Ho un servizio non interattivo in esecuzione come utente privilegiato SYSTEM su macchine Windows, e ho bisogno di avviare un dato eseguibile come processo elevato.Evitare UAC ma avviare un processo elevato utilizzando un servizio Windows

Sono riuscito a avviare un processo figlio come SYSTEM, utilizzando WTSGetActiveConsoleSessionId(), trovando un processo di sistema e duplicando il suo token. Allo stesso modo, posso avviare un processo non elevato come utente normale. Ma ho bisogno di avviare il processo come utente normale, ma con privilegi elevati, in modo che non debba mostrare UAC, ma il processo è in esecuzione come utente appropriato.

Non sto tentando di ignorare UAC, poiché l'utente ha già accettato di installare il servizio. Sto cercando di mitigare un inconveniente. Ho trovato uno similar, unanswered question - ma ho chiesto di nuovo nella speranza di ottenere una risposta.

+0

Supponendo che si stia utilizzando WTSQueryUserToken per ottenere un token per l'utente interattivo e che l'utente interattivo sia un amministratore, si dovrebbe essere in grado di ottenere il token con privilegi elevati utilizzando GetTokenInformation con l'opzione TokenLinkedToken. –

+0

Nota a margine, dovrebbe essere possibile (e più efficiente) avviare un processo figlio come SYSTEM duplicando il proprio token SYSTEM e quindi modificando l'ID sessione utilizzando SetTokenInformation e l'opzione TokenSessionId. –

+0

@HarryJohnston Grazie per le idee! L'idea del token collegato funziona bene. Se lo converti in una risposta, posso contrassegnarlo come accettato. – Liosan

risposta

3

Se si dispone di un token filtrato per l'utente interattivo - per esempio, una recuperata tramite WTSQueryUserToken() - è possibile recuperare il ("elevato") di token non filtrata utilizzando la funzione GetTokenInformation con l'opzione TokenLinkedToken.

Problemi correlati