Mam aplikację, która działa jako zwykły użytkownik, a usługa działa jako system lokalny. Chcę, aby aplikacja mogła powiadomić usługę, aby ponownie uruchomiła aplikację, gdy usługa wykona inne czynności. (Tak więc aplikacja nie będzie działać, gdy usługa wykonuje to "rzecz".) Aby usługa mogła uruchomić aplikację jako użytkownik, który ją po raz pierwszy uruchomił, potrzebuje tokena użytkownika. Aplikacja wysyła token do usługi przed jej zamknięciem, ale token/uchwyt jest nieprawidłowy, gdy usługa próbuje z niego korzystać. (Pierwszą rzeczą, którą robi to z DuplicateTokenEx, aby uzyskać token podstawowy.)Jak uzyskać ważny token użytkownika dla CreateProcessAsUser?
Czy token użytkownika jest ważny tylko w procesie, który wywołał OpenProcessToken?
Czy można to zrobić w inny sposób? Nie chcę, aby użytkownik musiał "logować się" do aplikacji za pomocą logonuser. To byłoby głupie. Sądzę, że mógłbym przekazać uchwyt procesu dla "explorer.exe" z aplikacji do usługi, której usługa mogłaby użyć do uzyskania tokena użytkownika, ale wymagałoby to dostępu do uprawnień PROCESS DUP HANDLE. Nie jestem zachwycony tym rozwiązaniem, ale może to jest sposób na zrobienie tego?
Dzięki, idę z pierwszym artykułem, tworząc token z ZwCreateToken. Trochę bałaganu, aby spakować wszystkie potrzebne rzeczy w wiadomości, ale najwyraźniej działał dla innych. –
Pierwszy artykuł wydaje się mieć błędy, drugi wygląda całkiem dobrze.Ale nie jestem pewien, dlaczego używałbyś ZwCreateToken (nieudokumentowanej, nieobsługiwanej i niezupełnie stabilnej metody), gdy istnieją udokumentowane metody robienia tego, co chcesz. –
Przepraszam, miałem na myśli drugie. Nie mogłem nawet znaleźć pierwszego. Robię coś takiego jak http://www.apnilife.com/E-Books_apnilife/Windows%20Programming_apnilife/Windows%20NT%20Undocumented%20APIs/1996%20Ch08_apnilife.pdf. Czy odwołujesz się do CreateToken? –