Wie bekomme ich einen gültigen Benutzer-token für die CreateProcessAsUser?
Ich habe eine Anwendung, die ausgeführt wird, als normaler Benutzer und einem Dienst als lokales system ausgeführt wird. Ich möchte die Anwendung in der Lage sein zu sagen, den Dienst zu starten die Anwendung erneut, sobald der service erledigt ein paar andere Sachen. (So wird die Anwendung nicht ausgeführt werden, während der Dienst macht es "Ding".) Damit der Dienst gestartet werden kann die Anwendung als der Benutzer, der zuerst gestartet wird, es muss ein Benutzer-token. Die Anwendung sendet das token an den service, bevor es beendet wird, aber die token/handle ist ungültig, wenn der Dienst versucht, es zu benutzen. (Erste Sache, die es tut, es ist DuplicateTokenEx um ein primäres token.)
Ist ein Benutzer-token immer nur gültig in den Prozess, genannt OpenProcessToken?
Gibt es eine andere Möglichkeit dies getan werden könnte? Ich möchte nicht den user mit auf "anmelden", um die Anwendung mit logonuser. Das wäre einfach albern. Ich denke, ich könnte mit der hand über Prozess-handle für "explorer.exe" von der app auf den Dienst, der den Dienst nutzen könnte, um ein Benutzer-token, aber das würde erfordern PROZESS-DUP-Zugriff rechten. Ich bin nicht begeistert über diese Lösung, aber vielleicht ist es die Art und Weise, es zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie mehrere Themen hier, also werde ich versuchen, Ihnen zu begegnen, voneinander getrennt und Sie können mich korrigieren, wenn ich falsch verstanden habe:
Anscheinend haben Sie ein service-und ein Benutzer-Anwendung nicht ausführen kann, die bestimmte Funktionen bei der gleichen Zeit. Um dies zu erreichen, müssen Sie den Dienst stoppen Sie die Anwendung, führen Sie die spezielle Funktionalität, dann starten Sie die Anwendung neu. Wenn dies korrekt ist dann, meiner Meinung nach, haben Sie ein design-Fehler. Anstatt zu stoppen, dann neu starten der Anwendung Sie sollten die Koordinierung des Zugriffs auf gemeinsam genutzte Ressourcen durch wechselseitige Ausschluss mithilfe eines benannten mutex und/oder mit einem IPC-Methoden wie named pipes zu kommunizieren, Absichten.
Ist ein Benutzer-token immer nur gültig in den Prozess, genannt OpenProcessToken? Ja, die token-handle, das Sie erhalten, ist ein index in der handle-Tabelle des Prozesses, es ist nicht direkt übertragbar. Du brauchst DuplicateHandle was kann das sein, was Sie wollen, aber könnte chaotisch sein.
Sie wollen den besten Weg finden, um das Zugriffstoken des Benutzers zum starten der Anwendung in der Benutzer (interaktiv?) Sitzung. Wenn dies der Fall ist, ist der beste Weg zum abrufen des Benutzers Sitzungs-token und verwenden. Sie können sich dieser Artikel und der Beispiel-code ist in C#, sollte aber relativ einfach zu übertragen auf die Sprache Ihrer Wahl.
EDIT: Aktualisiert, um Windows 2000. Da läuft der Dienst unter dem SYSTEM-Konto können Sie öffnen ein handle auf den Prozess selbst (wenn notwendig, den Prozess senden kann, seine Prozess-ID). Sie können dann öffnen Sie das token an diesem Prozess, duplizieren Sie es und verwenden Sie die resultierende token zu starten (oder neu starten) die Ziel-Anwendung.