Ich habe alle Beiträge auf Stack Overflow über CreateProcessAsUser gelesen und es gibt sehr wenige gelöste Fragen, also halte ich nicht den Atem an diesem. Aber es scheint, als würde ich definitiv etwas vermissen, also könnte es einfach sein.LogonUser -> CreateProcessAsUser von einem Systemdienst
Das Ziel-Betriebssystem ist Windows XP. Ich habe einen Dienst, der als "Lokales System" ausgeführt wird, von dem ich einen Prozess erstellen möchte, der als ein anderer Benutzer ausgeführt wird. Für diesen Benutzer habe ich den Benutzernamen und das Kennwort, damit LogonUser funktioniert und ich ein Token für den Benutzer (in diesem Fall ein Administratorkonto) erhalte. Ich versuche dann, dieses Token zum Aufrufen von CreateProcessAsUser zu verwenden, aber es schlägt fehl, weil dieses Token kommt nicht mit SeAssignPrimaryTokenPrivilege - es hat jedoch SeIncreaseQuotaPrivilege. (Ich habe GetTokenInformation verwendet, um alle mit diesem Token verknüpften Berechtigungen zu sichern.) Gemäß der MSDN-Seite für CreateProcessAsUser benötigen Sie beide Berechtigungen, um CreateProcessAsUser erfolgreich aufrufen zu können.
Er sagt auch, Sie nicht den SeAssignPrimaryTokenPrivilege benötigen, wenn das Token Sie sich in CreateProcessAsUser() übergeben eine „eingeschränkte Version des anrufenden Prozesses primäre Token“ ist, was ich mit CreateRestrictedToken schaffen kann(), aber es dann wird mit dem Benutzer des lokalen Systems verknüpft und nicht mit dem Zielbenutzer, mit dem ich den Prozess ausführen möchte.
Wie würde ich also ein Anmeldetoken erstellen, das eine eingeschränkte Version des primären Tokens des aufrufenden Prozesses ist UND mit einem anderen Benutzer verknüpft ist? Vielen Dank!
Beachten Sie, dass es hier keine Notwendigkeit für Benutzer-Interaktion ist - es ist alles unbeaufsichtigt - so gibt es keine Notwendigkeit, solche Sachen packen WinSta0, etc. zu tun
Was schlägt GetLastError nach CreateProcessAsUser fehl? – Anders
Haben Sie es gelöst? Ich brauche auch eine Lösung :) – AgentFire
Die Google Chrome-Jungs lösten dieses Problem auch mit einer undokumentierten Start-Server-API, die den ganzen Weg zurück zu XP existiert. Wenn Sie ein Token für den Benutzer erhalten können, den Sie erstellen möchten Der Prozess als, Sie können diesen Code hier folgen: http://src.chromium.org/chrome/trunk/src/remoting/host/win/launch_process_with_token.cc –