locked
SendInput(...) bei UAC-Dialogen und Windows Login

    Frage

  • Hallo an alle :-),

    Ich habe folgendes Problem: Ich muss per SendInput(...) auch User Account Control Dialoge (Also diese, wo man zb bestätigt, dass ein Programm ausgeführt werden soll..) bedienen können.

     

    Warum?

    Wir entwickeln bei uns eine Software für behinderte Menschen, die keine normale Tastatur oder Maus bedienen können. Dazu verwenden sie spezielle Geräte, die per seriellem Port an den Rechner angeschlossen sind, und über eine kleine C#-Applikation mit Windows kommunizieren, und.. unter anderem Auch Tastatureingaben und (später einmal..) Mausbewegungen simuliert.

     

    SendInput(...) funktioniert schon perfekt, wenn es sich um normale Windowsanwendungen handelt, aber sobald diese "elevated" sind, geht natürlich nix mehr. Wenn man die kleine Simulationsapplikation ebenfalls als Administrator startet, kann man immerhin schon auf elevated Prozesse eingeben lassen. UAC-Dialoge können damit aber immer noch nicht bedient werden, da dort SendInput offenbar geblockt wird.

     

    An einigen wenigen Posts die im Internet und in diversen Foren/Newsgroups verstreut sind, kann man rauslesen, dass eine Authenticode Zertifizierung da weiterhelfen kann. Manchmal steht dann aber auch dabei, dass das auch nichts weiterhilft.

     

    Hat damit schon jemand Erfahrung und kann mir sagen, ob ich da in eine Sackgasse mit meinem Vorhaben laufe, oder ob es da eh eine Möglichkeit gibt, per SendInput auf wirklich alles (also auch zb die Useranmeldung/Windowslogon) zuzugreifen.

     

    Bin für jeden kleinen Hinweis und/oder Tipp dankbar :-)

     

    Daniel.

    Dienstag, 29. Juni 2010 13:19

Antworten

  • Worin siehst Du nun ein Problem?
    Dann muss Dein Programm eben auch elevated laufen...

    Das Ganze liegt an den unterschiedlichen Windows Integrity Levels:
    http://msdn.microsoft.com/en-us/library/bb625963.aspx

    Den UAC Dialog wirst Du aber auch auf diesem Weg nicht überlisten!

    Grundsätzlich solltet ihr hier eher überlegen, ob ihr nicht auf Treiber Ebene eher eine gute Lösung erzeugt als über SendInput! Sicherlich mehr Aufwand aber ein "sicherer" und funktionierender Weg!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Dienstag, 29. Juni 2010 13:37

Alle Antworten

  • Worin siehst Du nun ein Problem?
    Dann muss Dein Programm eben auch elevated laufen...

    Das Ganze liegt an den unterschiedlichen Windows Integrity Levels:
    http://msdn.microsoft.com/en-us/library/bb625963.aspx

    Den UAC Dialog wirst Du aber auch auf diesem Weg nicht überlisten!

    Grundsätzlich solltet ihr hier eher überlegen, ob ihr nicht auf Treiber Ebene eher eine gute Lösung erzeugt als über SendInput! Sicherlich mehr Aufwand aber ein "sicherer" und funktionierender Weg!


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Dienstag, 29. Juni 2010 13:37
  • Hallo Martin,

    Vielen Dank für die Antwort :-). Genau so eine hab ich befürchtet ;-).

    Naja, um das Programm elevated laufen zu lassen, müsste man ja schon einmal so einen UAC-Dialog wegklicken, was ja nicht geht, weil man dazu eben eine Tastatur oder Maus benötigt, die direkt Scancodes an den Rechner schicken.

    Und ja, du hast recht, natürlich wäre es auf Treiberebene besser, aber ein paar dieser Geräte existieren halt schon, und manche Leute wollen die halt auch unter Vista nutzen, am besten genau so wie sies gewohnt sind.

    weißt du, wo ich am besten anfangen könnte, wenn wir es doch auf treiberebene versuchen wollen? speziell jetzt auf den anwendungsfall zugeschnitten    serielle schnittstelle -> protokoll verwursten -> keyboard/maus-ausgabe

    lg,

    Daniel.

    Donnerstag, 1. Juli 2010 11:44
  • Mal ein anderer Ansatz:
    Ich glaube Du kannst Dein Programm nicht ganz normal mit Adminrechten starten lassen wenn Du die neue Task-Verwaltung verwendest und nicht den Autostart!

    Systemsteuerung -> System und Sicherheit -> Verwaltung -> Aufgaben planen

    Dort kannst Du auch einen Task einrichten, der bei Systemstart gestartet wird und als Admin Prozess laufen soll. Bei der Einrichtung wird natürlich ein UAC Dialog gefordert (entweder durch das Setup, oder denjenigen der es einträgt).
    Für den Task selber kannst Du ja angeben, dass er als Admin gestartet werden muss.

    HTH


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Donnerstag, 1. Juli 2010 13:15
  • Hi!
    Den.at
    Ich habe hier die Seite zum Tema Uac Lösung, die finde Ich immer wieder sehr gut  mit Tipps und Code Scripts Anleitungen
    ,es könnte eventuell Helfen .
    Martins Blog .
    http://blog.m-ri.de/index.php/tag/uac/
    Ich hoffe, es kann behilflich sein.
     Ich habe zu diesem Tema UAC noch mehr Gesammelte Werke, von 2007 -2009.
    Bitte sonst melden!
    mfg
     entwickler
    Entwickler Microsoft Partner
    Donnerstag, 1. Juli 2010 20:34