Ich habe eine Anwendung, die als normaler Benutzer ausgeführt wird, und einen Dienst, der als lokales System ausgeführt wird. Ich möchte, dass die Anwendung dem Dienst mitteilen kann, dass er die Anwendung erneut starten soll, sobald der Dienst einige andere Aufgaben erledigt hat. (Die Anwendung wird also nicht ausgeführt, während der Dienst es ausführt.) Damit der Dienst die Anwendung als der Benutzer starten kann, der ihn zuerst gestartet hat, benötigt er ein Benutzer-Token. Die Anwendung sendet das Token an den Dienst, bevor es beendet wird, aber das Token/Handle ist ungültig, wenn der Dienst versucht, es zu verwenden. (Das erste, was damit geschieht, ist DuplicateTokenEx, um ein primäres Token zu erhalten.)Wie erhalte ich ein gültiges Benutzer-Token für CreateProcessAsUser?
Ist ein Benutzer-Token immer nur in dem Prozess gültig, der OpenProcessToken genannt wird?
Gibt es eine andere Möglichkeit, dies zu tun? Ich möchte nicht, dass sich der Benutzer mit logonuser bei der Anwendung anmelden muss. Das wäre nur albern. Ich denke, ich könnte einen Prozess-Handle für "explorer.exe" von der App an den Dienst übergeben, den der Dienst verwenden könnte, um ein Benutzer-Token zu erhalten, aber das würde PROZESS DUP HANDLE Zugriffsrecht erfordern. Ich bin nicht begeistert von dieser Lösung, aber vielleicht ist es der Weg, es zu tun? hier
Danke, ich gehe mit dem ersten Artikel, Erstellen eines Token mit ZwCreateToken. Es ist ein wenig chaotisch, all das Zeug, das ich brauche, in eine Nachricht zu packen, aber anscheinend hat es für andere funktioniert. –
Der erste Artikel scheint einige Fehler zu haben, der zweite sieht ziemlich gut aus.Aber ich bin nicht sicher, warum Sie ZwCreateToken (eine undokumentierte, nicht unterstützte und nicht ganz stabile Methode) verwenden würden, wenn es dokumentierte Methoden gibt, das zu tun, was Sie wollen. –
Sorry, ich meinte zweitens. Konnte nicht einmal das erste finden. Ich mache etwas wie http://www.apnilife.com/E-Books_apnilife/Windows%20Programming_apnilife/Windows%20NT%20Undocumented%20APIs/1996%20Ch08_apnilife.pdf. Verweisen Sie auf CreateToken? –