【问题标题】:How to receive keyboard input from application with admin privileges to a non-admin application?如何从具有管理员权限的应用程序接收键盘输入到非管理员应用程序?
【发布时间】:2013-03-31 16:42:10
【问题描述】:

我编写了一个应用程序,它有一个覆盖式窗口,可以通过热键显示和隐藏,而另一个应用程序具有焦点。所述其他应用程序是以管理员权限运行的 DirectX 游戏。

我已经尝试了 3 种可能的解决方案,以便在我的热键在另一个应用程序中按下时得到通知,其中 2 种可行,但要求我的应用程序也具有管理权限。这是可以接受的,但我更希望有一个不需要这些特权的解决方案。我确信一定有办法,因为像 TeamSpeak 这样的应用程序确实可以在不以管理员身份运行的情况下接收输入。

我已经尝试过的:

  1. RegisterHotkey - 不适合,因为它在 DirectX 窗口中不起作用。
  2. SetWindowsHookEx - 用作通用键盘挂钩,但仅具有管理员权限。
  3. GetAsyncKeyState - 用于检查指定的热键,但不是没有管理员权限。

所以是的,如果有人能提供一个不同的解决方案的想法,我将非常感激,因为我想不出更多了......我正在使用 Delphi,但由于我依赖于 Windows API,我不要认为解决方案是特定于语言的。

【问题讨论】:

    标签: delphi winapi keyboard-hook uipi


    【解决方案1】:

    我认为 TeamSpeak 将 DirectInput 用作其热键(如果您已经在使用 DirectX,这很适合您)。至于与提升的程序交互,我认为唯一的解决方案,我相信 TeamSpeak 使用的一个解决方案是嵌入一个设置 uiAccess=true 的应用程序清单。这允许您绕过 UIPI,而无需以管理员身份运行应用程序。

    http://msdn.microsoft.com/en-us/library/bb756929.aspx

    为此,有一些注意事项

    • 应用程序必须经过验证码签名
    • 应用程序必须驻留在受保护的目录(\ProgramFiles\,\system32)中

    您可以对应用程序进行自签名(因为替代方案很昂贵!)但您必须手动分发证书并将其安装在任何运行相关应用程序的系统上。

    【讨论】:

    • 感谢您的意见,这似乎是正确的解决方案。但是,根据我所读到的内容,与我的安装程序一起提供这样的自签名证书是一个潜在的安全风险,我宁愿不采取这种做法,因为我对此事没有更深入的了解......如果我'我错了。
    • @HeinaBaumstamm 我认为让用户使用 uiAccess 运行您的应用程序而不是完全管理员权限会更安全......在任何一种情况下,您都必须让他们相信您没有将恶意软件强加给他们.否则,您的应用程序成为外部攻击入口点的可能性非常小。当然,如果您在直接管理员上使用 uiAccess 运行,您的应用程序可能会因错误而导致的意外损坏受到更多限制。这真的是方便和信任的问题......真的取决于谁将使用程序。
    猜你喜欢
    • 1970-01-01
    • 2015-05-07
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    相关资源
    最近更新 更多