Ho un'applicazione in esecuzione come utente normale e un servizio in esecuzione come sistema locale. Voglio che l'applicazione sia in grado di dire al servizio di riavviare l'applicazione, una volta che il servizio ha fatto altre cose. (Quindi l'applicazione non verrà eseguita mentre il servizio sta facendo la sua "cosa".) Affinché il servizio sia in grado di avviare l'applicazione come utente che l'ha avviata per la prima volta, ha bisogno di un token utente. L'applicazione invia il token al servizio prima che si chiuda, ma il token/handle non è valido quando il servizio sta tentando di usarlo. (La prima cosa che fa è DuplicateTokenEx per ottenere un token primario.)Come ottengo un token utente valido per CreateProcessAsUser?
Un token utente è sempre valido solo nel processo che ha chiamato OpenProcessToken?
C'è qualche altro modo in cui questo potrebbe essere fatto? Non voglio che l'utente debba "accedere" all'applicazione con logonuser. Sarebbe semplicemente sciocco. Immagino di poter passare un handle di processo per "explorer.exe" dall'app al servizio, che il servizio potrebbe utilizzare per ottenere un token utente, ma che richiederebbe l'accesso a PROCED DUP HANDLE. Non sono entusiasta di questa soluzione, ma forse è il modo di farlo?
Grazie, vado con il primo articolo, creando un token con ZwCreateToken. È un po 'complicato imballare tutte le cose di cui ho bisogno in un messaggio, ma a quanto pare ha funzionato per gli altri .. –
Il primo articolo sembra avere alcuni errori, il secondo sembra abbastanza buono.Ma non sono sicuro del perché dovresti usare ZwCreateToken (un metodo non documentato, non supportato e non del tutto stabile) quando ci sono metodi documentati per fare ciò che vuoi. –
Scusa, volevo dire secondo. Non riuscivo nemmeno a trovare il primo. Sto facendo qualcosa come http://www.apnilife.com/E-Books_apnilife/Windows%20Programming_apnilife/Windows%20NT%20Undocumented%20APIs/1996%20Ch08_apnilife.pdf. Ti riferisci a CreateToken? –