Autor |
Beitrag |
Siluro
      
Beiträge: 74
Win XP Prof., Win XP64 Prof., Win 7 Prof.
Delphi 7 Ent., Delphi XE, Delphi XE5
|
Verfasst: Fr 04.12.09 18:21
Hi,
ich habe ein Tool geschrieben das OpenVPN benutzt und auf eine entfernte Netzwerkfreigabe zugreift. Läuft bis Windows XP auch alles bestens, aber mit UAC hat es so seine Probleme. Wegen dem OpenVPN muss das Tool als Administrator gestartet werden, allerdings wird dann das per net use eingebundene Laufwerk im Arbeitsplatz nicht angezeigt. Weiss zufällig jemand wie ich dafür sorgen kann, dass shellexecute nicht als Administrator ausgeführt wird, wenn das Tool an sich als Administrator ausgeführt wird?
Danke schonmal für eure Hilfe.
Gruß
Björn
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Fr 04.12.09 19:39
Das geht nur auf Umwegen. Normalerweise hast du dazu keine Möglichkeit.
Zwei Möglichkeiten: Entweder sich das Token des entsprechenden Benutzers holen und mittels CreateProcessAsUser den Prozess mit dessen Anmeldung starten. Oder den Prozess über den Taskplaner mit der entsprechenden Anmeldung starten.
Beide Lösungen sollten klappen, ich würde aber die letztere via Taskplaner favorisieren.
Und eine dritte Möglichkeit: Zuerst einen Starter ohne Adminrechte laden, der dann erst die UAC aufpoppen lässt für eine zweite Instanz, aber im Hintergrund weiterläuft. Dieser kann dann alles als non-admin machen und via IPC zurückliefern. So arbeitet auch mein in die Exe integrierter Updater. Das ist zwar einiger Aufwand das sauber umzusetzen (habe ich nicht ganz sauber gemacht), aber dann funktioniert es sehr gut.
|
|
Siluro 
      
Beiträge: 74
Win XP Prof., Win XP64 Prof., Win 7 Prof.
Delphi 7 Ent., Delphi XE, Delphi XE5
|
Verfasst: Mo 15.03.10 09:59
Erstmal Danke für die Tipps.
Der dritte Weg, auch wenn er wahrscheinlich wirklich der schönste ist, fällt schonmal raus, da nicht jeder Benutzer das Admin-Kennwort wissen soll. UAC sollte also nach Möglichkeit garnicht erst aufpoppen.
Am besten gefällt mir persönlich die erste Möglichkeit, allerdings gibts da noch ein Problem:
Ich habe jetzt probiert OpenVPN mit CreateProcessWithLoginW zu starten. Klappt auch soweit ganz gut, allerdings wird nur ein Teil der Routen in die Routingtabelle eingetragen. Das ist zwar schon besser als vorher (gar keine eingetragenen Routen), aber halt noch nicht ausreichend.
Nachdem mir das alles ein bisschen komisch vorgekommen ist, hab ich bei der OpenVPN.exe mal den Haken bei "Programm als Administrator ausführen" gesetzt und siehe da, jetzt bekomme ich von meinem Tool die Meldung "Der Vorgang benötigt erhöhte Rechte".
Was mach ich da Falsch? Ich dachte CreateProcessWithLogin wäre genau dafür da, um diese Rechte zu bekommen. Bin für jede Hilfe dankbar.
Gruß
Björn
Zuletzt bearbeitet von Siluro am Do 22.04.10 01:32, insgesamt 2-mal bearbeitet
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mo 15.03.10 10:20
Siluro hat folgendes geschrieben : | Der dritte Weg, auch wenn er wahrscheinlich wirklich der schönste ist, fällt schonmal raus, da nicht jeder Benutzer das Admin-Kennwort wissen soll. UAC sollte also nach Möglichkeit garnicht erst aufpoppen. |
Das heißt du schreibst es dann lieber im Klartext (oder fast so) in die Exe oder wie soll das Login sonst gehen?
Siluro hat folgendes geschrieben : | Ich dachte CreateProcessWithLogin wäre genau dafür da, um diese Rechte zu bekommen. |
Nein, die Funktion dient zum Login als der angegebene Benutzer. Allerdings bekommst du dann das non-admin Token, nicht das elevierte Admintoken. Dementsprechend bist du dann zwar als der Benutzer angemeldet, aber ohne Adminrechte. Und das war doch anfangs auch deine Frage...
Wenn der Benutzer selbst gar keine Adminrechte hat, dann kannst du keinen Prozess mit Adminrechten, aber im Kontext des Benutzers, starten. Erkläre doch bitte noch einmal was jetzt eigentlich Adminrechte haben soll und was nicht. Eingangs sagtest du dein Tool habe Adminrechte und soll dann einen Prozess ohne diese starten.
Es gibt die Möglichkeit die Netzlaufwerke zu sharen, d.h. diese auch mit Adminrechten dann zu erreichen. Das muss man lediglich einstellen, auch wenn es nicht empfehlenswert ist aus Sicherheitsgründen. So funktionieren die Netzlaufwerke sowohl bei der Adminversion als auch bei dem normalen Token eines Benutzers. Alternative wäre dann natürlich noch ohne Netzlaufwerk auf die Freigabe zuzugreifen. Vorausgesetzt dies ist rechtemäßig auch von deinem Adminaccount möglich, aber das sollte sich einrichten lassen nehme ich an.
|
|
Siluro 
      
Beiträge: 74
Win XP Prof., Win XP64 Prof., Win 7 Prof.
Delphi 7 Ent., Delphi XE, Delphi XE5
|
Verfasst: Mo 15.03.10 11:04
Danke erstmal für die schnelle Antwort.
jaenicke hat folgendes geschrieben : | Erkläre doch bitte noch einmal was jetzt eigentlich Adminrechte haben soll und was nicht. Eingangs sagtest du dein Tool habe Adminrechte und soll dann einen Prozess ohne diese starten. |
Hierzu wird es jetzt doch erst nochmal ein Meeting geben. Danach weiss ich hoffentlich endlich wie das ganze umgesetzt werden soll. Werd mich dann wahrscheinlich nochmal melden.
Edit:
Wir haben es jetzt ganz anders gemacht. OpenVPN wird jetzt als Dienst installiert und dann über eine TCP-Verbindung gesteuert.
|
|
|