Shellexecute - externes Programm starten - Win8.1



  • Hi,

    wie kann man denn eine externes Programm zum Beispiel Notepad.exe über Shellexecute so starten das es Drag&Drop fähig bleibt also man einfach Textdateien vom Desktop in das Notepad Fenster ziehen kann ? Seit Windows 8.1 funktioniert das nicht mehr, gibts dafür ne Lösung ?



  • Kann sein, dass mir das komplett entgangen ist, aber das wär mir irgendwie neu.
    Kann es sein, dass du das Programm mit Admin Rechten startest?



  • Ja, starte ich mit Admin Rechten. Wieso ist das schlimm ?



  • Weil das Messaging zwischen Programmen mit unterschiedlichen privilege leveln nicht mehr erlaubt ist. D.h., du kannst z.B. kein Drag&Drop von einem nicht-admin in ein admin Programm machen. Das war eine Sicherheitslücke.



  • Das ist echt Kacke, hab es probiert und ja ohne Admin Rechte geht es wirklich per Drag&Drop. Da hab ich dann wohl Pech gehabt wenn mein kleines Tool was nix böses tut nicht mehr ordnungsgemäß läuft.



  • Das Problem ist nicht dein Tool.
    Ist schon ewig her, dass ich mir das mal angeschaut habe, aber ganz grob, wie man sich das vorstellen könnte. Du hast irgendein Programm, das mit Admin Rechten läuft. Das muss nichts böses tun. Hat aber ein Eingabefeld, z.B. Dateiöffnen-Dialog oder ähnliches. Da könnte man einen Shellcode einfügen, und dann schickt man dem Programm eine WM_TIMER Nachricht, die als Callback Adresse die Adresse der Daten des Eingabefeldes enthält. Und schon führt man mit Admin Rechten Code aus, obwohl man das nicht dürfte.



  • habe da noch was entdeckt, bei meinem Tool welches ich ja über Radstudio Programmiere musste ich noch in den Optionen den klassischen Borland Compiler wieder aktivieren, erst jetzt kann man wieder Drag&Drop auf externe Programme ausführen.



  • @Mechanics Naja das kann gut möglich sein, mehr fällt mir im Moment nicht dazu ein ich bin genervt weil ich mein Programm komplett überarbeiten muss. Da ich längst nicht alle Möglichkeiten kenne muss ich vieles probieren um dennoch an die AdminRechte zu gelangen wenn ich Sie brauche.



  • So habe mir nun ne saubere Sicherung vom tool genommen Admin-Manifest rausgeschmissen, klassischen Borland Compiler: auf deaktiviert belassen, läuft erstmal noch wie erwünscht.



  • @Gestalt Nur um dir eventuelle Sucherei zu ersparen: Du kannst unter Windows für dein laufendes Programm Admin-Rechte nicht nachträglich anfordern, das muss beim Programmstart geschehen. D.h. du musst einen neuen Prozess starten um das Admin-Zeugs zu erledigen und zwar anscheinend mit ShellExecuteEx und shex.lpVerb = _T("runas").
    Bzw. wenn du dazu eine zweite .exe machst kann diese natürlich auch ein "requires elevation" Manifest haben, dann kannst du den Prozess vermutlich ganz normal mit ShellExecute starten. (Ob CreateProcess geht weiss ich nicht.)



  • @hustbaer Ich bin schon dabei, keine Sorge, einiges starte ich über ShellExecute + Runas und einiges muss ich seperat als exe File auslagern, wird etwas arbeit aber ist man ja gewohnt.


Log in to reply