2009-10-01 16 views
5

Ho una DLL di aggancio per tastiera a livello di sistema che ho creato e che funziona da anni con successo in Windows XP.Hook per tastiera a livello di sistema su Vista e versioni successive

Tuttavia, sembra che in alcune versioni successive di Windows (Vista Home Premium e Windows 7, per nominare una coppia), l'hook non funzioni del tutto, o semplicemente funzioni solo localmente all'interno dell'applicazione installata esso.

L'ho visto suggerito in un paio di posti su Internet per cambiare WH-KEYBOARD in WH-KEYBOARD-LL nella chiamata a SetWindowsHookEx, ma questo non sembra essere d'aiuto quando l'ho provato. C'è qualcos'altro che devo cambiare oltre a cambiare il tipo di gancio in WH-KEYBOARD-LL?

(PS: ho dovuto definire WH-TASTIERA-LL come 13, dal momento che non definito in Delphi sto assumendo questo è accurata..)

+0

In base a http://pinvoke.net/default.aspx/Enums/HookType.html, sì, WH_KEYBOARD_LL' è 13. –

risposta

8

Assicurarsi che il processo che ospita il gancio è allo stesso il livello di privilegio dell'applicazione che intendi agganciare. Tastiera e altri hook rappresentano un rischio elevato per la sicurezza, quindi Vista e versioni successive sono state modificate per consentire solo hook di sistema in processi all'interno di un determinato contesto di sicurezza comune. In altre parole, se si avvia il processo host hook con i diritti utente, si agganciano solo i processi che si trovano allo stesso livello di privilegio. Se ci pensate, questo ha senso perché non vorreste che un processo a livello utente sia in grado di iniettare il codice in un processo a livello di amministrazione. Questo è male su così tanti livelli.

Problemi correlati