AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Globaler Keyboard-Hook gilt nicht wenn Admin-Prozess Fokus hat?
Thema durchsuchen
Ansicht
Themen-Optionen

Globaler Keyboard-Hook gilt nicht wenn Admin-Prozess Fokus hat?

Offene Frage von "Der schöne Günther"
Ein Thema von Der schöne Günther · begonnen am 21. Mai 2015 · letzter Beitrag vom 22. Mai 2015
Antwort Antwort
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Globaler Keyboard-Hook gilt nicht wenn Admin-Prozess Fokus hat?

  Alt 21. Mai 2015, 13:14
Folgendes Szenario:
  • Eine Kiosk-Anwendung läuft im Benutzerkontext (keine Adminrechte)
  • Die Anwendung ist Vollbild, auch bei angeschlossener Tastatur soll der Benutzer nicht Standard Tastenkombos wie ALT+TAB usw verwenden können
  • Dazu schiebt die Anwendung mittels SetWindowsHookEx(..) einen WH_KEYBOARD_LL -Hook ins System
. Dieser Hook unterbindet die weitere Verarbeitung von unerwünschten Tasten wie Windows, ALT+TAB, ...

Das funktioniert super. Leider haben wir ein paar Systeme ausgeliefert welche unter Windows das "On Screen Keyboard" aufrufen können wenn man an den Bildschirmrand patscht. Und diese Bildschirmtastatur ist von Windows anscheinend "blessed", läuft also mit Adminrechten. Das Problem hierbei: Drückt man auf der Bildschirmtastatur ALT+TAB, wird das vom Keyboard-Hook nicht mehr abgefangen.

Was kann ich tun? Das automatische Aufrufen der Bildschirmtastatur unterbinden, klar. Aber ginge statt langwieriger Windows-Konfiguration nicht auch eine elegantere Code-Anpassung?
  Mit Zitat antworten Zitat
Benutzerbild von Captnemo
Captnemo

Registriert seit: 27. Jan 2003
Ort: Bodenwerder
1.126 Beiträge
 
Delphi XE4 Architect
 
#2

AW: Globaler Keyboard-Hook gilt nicht wenn Admin-Prozess Fokus hat?

  Alt 21. Mai 2015, 13:22
Ich kann zwar die Lösung nicht. Aber mir sind gleich mal 2 Gedanken durch den Kopf geschossen:

1. Wie schaut's den mit dem Hook aus, wenn du mal ein anderes Programm mit Adminrechten startest, und über die reale Tastatur bedienst? Geht das auch nicht?

2. Simuliert die Bildschirmtastatur wirklich Tastenanschläge? (Was ich meine, liegt es wirklich an den Adminrechten, oder laufen die Tastendrücke am Ende nur an dem Hook vorbei)
Dieter
9 von 10 Stimmen in meinem Kopf sagen ich bin nicht verrückt. Die 10. summt dazu die Melodie von Supermario Bros.
MfG Captnemo
  Mit Zitat antworten Zitat
BadenPower

Registriert seit: 17. Jun 2009
616 Beiträge
 
#3

AW: Globaler Keyboard-Hook gilt nicht wenn Admin-Prozess Fokus hat?

  Alt 21. Mai 2015, 13:25
Wäre es eine Möglichkeit die ThreadId des virtuellen Tastatur-Prozesses zu ermitteln und diesen als 4.Parameter der SetWindowsHookEx-Funktion zu übergeben?

Ob das aber letzendlich funktioniert kann ich Dir nicht sagen und hab dies bislang auch noch nie getestet.


EDIT:

Die zwei Gedanken von Captnemo hatte ich auch.
Denn wenn man den Task-Manager startet laufen auch manche mit SetWindowsHookEx erstellten Hooks danach ins Leere.
Programmieren ist die Kunst aus Nullen und Einsen etwas sinnvollen zu gestalten.
Der bessere Künstler ist allerdings der Anwender, denn dieser findet Fehler, welche sich der Programmierer nicht vorstellen konnte.

Geändert von BadenPower (21. Mai 2015 um 13:29 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#4

AW: Globaler Keyboard-Hook gilt nicht wenn Admin-Prozess Fokus hat?

  Alt 21. Mai 2015, 14:58
Dein Hook hat natürlich nur auf Prozesse Zugriff, die in seinem Kontext laufen, bzw. für die er die Rechte hat.

Als Admin ausgeführt würde er auch Zugriff auf die Adminprozesse haben.


PS: außerdem ist der Zugriff auf einen anderen Desktop sowieso gesperrt.
z.B. die Admin-Passwortabfrage (UAC) läuft in einem anderem Desktop, damit "böse" Programme (Keyboardlogging oder Eingabesimulation) keinen Zugriff darauf haben.
$2B or not $2B
  Mit Zitat antworten Zitat
CCRDude

Registriert seit: 9. Jun 2011
678 Beiträge
 
FreePascal / Lazarus
 
#5

AW: Globaler Keyboard-Hook gilt nicht wenn Admin-Prozess Fokus hat?

  Alt 22. Mai 2015, 10:46
Womit himitsu ganz nebenbei schon eine wesentlich bessere Methode genannt hat. Ein neuer Desktop hat erstmal GAR nichts, nichtmal ne Explorer-Leiste.

Habe selber schon eine Anwendung geschrieben, die einen alternativen Desktop nutzt, und debuggen war äußerst nervig - bei gröberen Fehlern im switching kam ich gar nicht zurück und musste jeweils neustarten. Zwingt dann, mehr nachzudenken, also gar nicht verkehrt
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.176 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Globaler Keyboard-Hook gilt nicht wenn Admin-Prozess Fokus hat?

  Alt 22. Mai 2015, 12:47
Dein Hook hat natürlich nur auf Prozesse Zugriff, die in seinem Kontext laufen, bzw. für die er die Rechte hat.
Das ist die vollkommen logische Erklärung dafür, ja. Aber hochoffiziell bei Microsoft habe ich das auf die Schnelle nicht gefunden. Liegt aber wohl an mir.

Und ja, wenn man es "richtig" macht, dann eigentlich gleich mit eigenem Desktop, aber das ist hier, aus verschiedenen Gründen, leider ausgeschlossen. Wir werden wohl an Windows-Einstellungen drehen müssen dass das OSK verschwindet.

Oder es aussitzen und hoffen dass es niemandem auffällt. So viele Systeme waren es nun auch wieder nicht
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:21 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz