2009-04-13 102 views
0

我试图编写一个Utility Manager应用程序,我试图在WinXP SP3上测试它。 我把它添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Accessibility\Utility Manager,并加载程序管理器时,当我在我登录它工作得很好。如何安装可在安全桌面上运行的公用程序管理器应用程序?

然而,当我尝试从工具管理器在启动时登录(通过窗口+ U)之前加载它,或锁定屏幕上出现错误消息,说(大约,因为它是德语版的WinXP)“此应用程序无法在安全桌面上执行,请联系您的系统管理员以获取所需的权限”。

为了在安全桌面上完成这项工作,我需要做些什么不同?

[B]编辑:[/ B] 我跟大卫教皇的建议,并试图调试utilman.exe(使用OllyDebug因为我比使用新的调试器...更多习惯了,并问它打破过程创造)。看起来好像我的应用程序根本就没有开始。由于OllyDebug似乎有一些功能(如API调用中断)被禁用(可能是因为该进程作为不同的用户运行),所以我使用Sysinternals Process Monitor对其进行了双重检查。启动屏幕键盘时,会出现“创建过程”事件;当启动我的工具时,不会显示任何事件。

另一方面的注意事项:当我将osk.exe(屏幕键盘)放入我的新注册表项时,它工作正常(我在菜单中基本上有两个屏幕键盘输入),但是如果我复制osk。 exe到osk2.exe并将osk2.exe作为可执行文件,则屏幕键盘onls的副本将在非安全桌面上启动。所以在调用可执行文件之前,它必须是某种验证(针对文件名+内容)?用我的工具(或osk.exe)替换magnify.exe将使下一次重新启动后(当utilman重新启动时)失效。

换句话说:它只有在文件名为osk.exe并且在屏幕键盘上或该文件被命名为magnify.exe并且是magnifyer时才起作用。

这不会在事件日志中创建任何信息。

回答

3

您是否遵循了this page的所有说明?它似乎涵盖了比您所描述的更多的注册表设置。

编辑:正如你指出的,看起来这个页面是Vista的。它很烦人MSFT如何挑选遗留信息,并使其很难找到...

有一件事要检查事件日志 - 也许他们包含一个线索。有可能提高审计水平以查看更多与安全相关的数据。

我没有你的代码,所以我不能自己调试它,但是我可以将一个调试器挂接到utilman.exe,并在启动安全桌面上的实用程序时获得控制权。也许如果你这样做,你可以找出安全违规。

  1. 在目标计算机上:
    • 为Windows安装调试工具。
    • 启用RDP访问。
    • 锁定屏幕。
    • 按Win-U启动公用设施管理器并保持运行。
    • 确保您的符号和源在目标上与开发机器上编译的路径相同。
  2. 在另一台机器:
    • RDP到目标计算机与调试/管理员权限的用户。
  3. 在RDP会话:
    • 运行的WinDBG和附加到utilman过程(F6键)
    • 如果它不中断到调试,按ctrl-break。
    • 执行.childdbg 1以确保您的实用程序在启动时加载到此调试器实例中。
    • 执行g继续运行。
  4. 回到目标计算机控制台(登录屏幕)上:
    • 启动您的公用事业从公用设施管理。调试器(在RDP会话中)应该在新进程内部中断,并且应该能够从那里进行调试。

(我没有在机器上的Visual Studio,我试过了这一点。如果你有VStudio在目标机器上你也许可以用它代替的WinDBG)

如果你的实用程序甚至没有加载,那么在调用CreateProcess之前,Windows会进行某种验证。安全日志可能能够帮助你。

编辑2我试着用strings实用程序找到生成对话框的程序,但是我在英文WinXP上,所以我没有实际的字符串。我也寻找硬编码的“osk.exe”等没有运气。

如果你能弄清楚什么是EXE的对话框(可能是utilman,也许winlogon ...),你应该可以通过调试器附加到它上面,然后走回堆栈找到错误检查出。一旦您的检查失败后,您应该能够在代码路径中更早地设置断点,并在下次尝试启动时进入调试器。你应该能够从那里逐步通过失败的支票。对于所有这些,确保你有OS symbols可用,因为它应该使“路标”更容易阅读。我不太清楚你的调试器是否支持符号服务器。

+0

似乎Vista的密钥已更改。这些密钥在我的XP版本中不存在。 – mihi 2009-04-20 18:24:17

+0

感谢您的建议。我相应地更新了我的问题。 – mihi 2009-04-24 16:43:42

0

我不知道该消息的来源是什么,但我知道有一个名为Winlogon的桌面对象,它是安全的CTRL + ALT + DELETE桌面。在GUI线程中创建任何窗口之前,您可以使用OpenDesktopSetThreadDesktop,并且应该使您的窗口在那里显示。在更新版本的Windows中使用可访问性API可能有另一种方法。

+0

是的,我知道。在安全桌面上打开我自己的窗口不是我的问题。我想将我的程序添加到Utility Manager中。您知道,当您在登录屏幕上按Window + U时,您可以打开放大镜或屏幕键盘或某些Windows版本旁白。我只想进入那个名单。 – mihi 2009-04-15 19:14:44

1

您的程序是否进行了数字签名?你的程序从哪里运行?

尝试有它下面的保护路径之一:

* ..\Program Files\ (and subfolders) 
* ..\Program Files (x86)\ (and subfolders, in 64-bit versions of Windows only) 
* ..\Windows\System32\ 

你见过http://netsecurity.about.com/od/secureyourwindowspc/qt/uacuiaccess.htm?这似乎描述了你想要做的一些事情。

+0

我现在用测试键对我的应用程序进行了数字签名(这在我的测试机器上是可信的)。它不会帮助。 该文件已位于\ Windows \ System32文件夹中。 该链接中的问题有点不同(这是关于在非安全桌面上在Vista上运行提升提示),我想在WinXP的安全桌面上运行应用程序。但无论如何,签署应用程序本来可以是一个好主意,只是它没有帮助。 – mihi 2009-04-25 14:51:04

相关问题