2014-05-20 2 views
5

Ich habe einen nicht interaktiven Dienst, der als privilegierter SYSTEM-Benutzer auf Windows-Computern ausgeführt wird, und ich brauche eine bestimmte ausführbare Datei als erhöhten Prozess.UAC vermeiden, aber einen erhöhten Prozess mit einem Windows-Dienst starten

Ich habe es geschafft, einen untergeordneten Prozess als SYSTEM zu starten, WTSGetActiveConsoleSessionId() zu verwenden, einen Systemprozess zu finden und seinen Token zu duplizieren. Ebenso kann ich einen nicht erhöhten Prozess als normaler Benutzer starten. Aber ich muss den Prozess als normaler Benutzer starten, aber mit erhöhten Rechten - so dass ich keine Benutzerkontensteuerung anzeigen muss, aber der Prozess wird als der entsprechende Benutzer ausgeführt.

Ich versuche nicht UAC zu umgehen - da der Benutzer bereits der Installation des Dienstes zugestimmt hat. Ich versuche, eine Unannehmlichkeit zu mildern. Ich habe eine similar, unanswered question gefunden - aber nochmal gefragt in der Hoffnung, vielleicht eine Antwort zu bekommen.

+0

Angenommen, Sie verwenden WTSQueryUserToken, um ein Token für den interaktiven Benutzer abzurufen, und der interaktive Benutzer ist ein Administrator, sollten Sie das erhöhte Token mithilfe von GetTokenInformation mit der Option TokenLinkedToken abrufen können. –

+0

Nebenbei bemerkt, sollte es möglich (und effizienter) sein, einen untergeordneten Prozess als SYSTEM zu starten, indem Sie Ihr eigenes SYSTEM-Token duplizieren und dann die Sitzungs-ID mithilfe von SetTokenInformation und TokenSessionId ändern. –

+0

@HarryJohnston Danke für die Ideen! Die verknüpfte Token-Idee funktioniert in Ordnung. Wenn Sie es in eine Antwort konvertieren, kann ich es als akzeptiert markieren. – Liosan

Antwort

3

Wenn Sie ein gefiltertes Token für die interaktiven Benutzer - zum Beispiel eines über WTSQueryUserToken() abgerufen - Sie können die ungefilterten abrufen können („elevated“) Token durch die GetTokenInformation Funktion mit der TokenLinkedToken Option.

Verwandte Themen