2009-04-13 98 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

相關問題