Domanda

Mi chiedevo se esiste un modo semplice per un servizio di creare un processo nella sessione utente?

Il mio servizio è in esecuzione come account utente (amministratore) e non come account LocalSystem, quindi non posso utilizzare la funzione WTSQueryUserToken.

ho provato a chiamare

OpenProcessToken(GetCurrentProcess,TOKEN_ALL_ACCESS,TokenHandle);

ma quando utilizzo questo token per eseguire

 CreateProcessAsUser(TokenHandle,.....)

il mio processo è ancora in esecuzione nella sessione 0.come posso risolvere questo problema?

Sto utilizzando un'automazione Ole, quindi non mi interessa davvero su quale sessione verrà eseguito il processo, purché non sia la sessione 0, perché Ole per qualche motivo non crea i suoi processi (winword.exe per istanza) nella sessione 0, ma piuttosto li crea in altre sessioni utente.

Eventuali suggerimenti saranno benvenuti.Grazie in anticipo.

È stato utile?

Soluzione

Sono stato in grado di risolvere questo problema da solo, grazie a tutti coloro che hanno esaminato questa domanda.

Ok, quindi, come ho detto sopra, il token appartiene a un processo in esecuzione nella sessione 0...

quindi quello che ho fatto... è stato cercare un token di un processo che non è in esecuzione nella sessione 0.quando prendi l'ID del processo come parametro per OpenProcessToken.poi CreateProcessAsUser creerà il processo nella stessa sessione (e probabilmente con le stesse credenziali del processo che hai scelto);

Il problema era che non avrei potuto ottenere dettagli sulla maggior parte dei processi utilizzando la funzione:Queryfullprocessimagename - perché ha un bug e non funziona su proccess che sono creati da un percorso che contiene spazi (come i file c: programmi per esempio) e un altro problema con quella funzione credo sia che perché sto eseguendo Il processo originale che utilizza un utente Cridentals non riesco ad accedere alle informazioni di un processo in esecuzione utilizzando l'account del sistema locale.il che è piuttosto negativo perché volevo prendere winlogon.exe come processo (perché indica una nuova sessione aperta).

anche per riuscire in questo trucchetto bisogna giocare un po' con la sicurezza del sistema, in modo da permettere al processo di richiedere una sicurezza elevata:ciò per cui ho scelto di essere elevato è:SeDebugPrivilege - per trovare informazioni sui processi in esecuzione SeAssignPrimaryTokenPrivilege - per eseguire un nuovo processo con il token che ho estratto dal processo della sessione utente (cioè explorer.exe) SeCreateTokenPrivilege - non so se è necessario, ma l'ho fatto comunque perché suona correlato.

per riuscire ad elevare questi privilegi, è necessario aggiungere l'utente che esegue il processo agli utenti rilevanti in tutti questi privilegi in run->gpedit.msc o run->secpol.msc (in Criteri computer locale\Configurazione computer\ Impostazioni di Windows\Impostazioni di sicurezza\Criteri locali\Assegnazioni diritti utente)

aggiungi il tuo account ai seguenti diritti (compatibile con i privilegi di cui sopra):
Crea un oggetto token
Programmi di debug
Sostituisci un token a livello di processo

e questo è tutto!:) ha funzionato alla grande!A proposito, potresti voler disabilitare tutte le cose dell'UAC... non so se sia correlato o meno, ma ha reso il lavoro con 2008 meno doloroso: niente più popup fastidiosi.

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