2011年7月2日 星期六

Accessing Higher Privileged Application

在 Vista 或是 Windows 7 中, 如果有開啟 UAC, 而經 UAC 尋問後執行的程式, 會執行於最高的權級, 跟以一般使用者權級執行的程式有所區隔, 以防止在低權級執行的惡意程式控制高權級程式, 如 SendMessage 等, 這稱為 User Interface Privileged Isolation(UIPI).

如果我們自己的程式要送訊息到高權級的程式, 除了透過 UAC 提升權級外, 還有一個辦法, 就是 Bypass UI Protection, 但需滿足三個條件, 缺一不可.

  1. 在 VS 專案中, 設定 Linker / Manifest File / UAC Bypass UI Protection 為 Yes [即 uiAccess=true].
  2. 程式必須被可信認的數位簽章簽署, 得以知道程式的來源及其未被篡改.
  3. 程式必須放在系統分區中的 Program Files [(x86)] 下

這樣一來, 我們的程式就可以不需要透過 UAC 提升權級, 且能與高權級的程式溝通. 然而, 似乎 Bypass UI Protection 後的程式, 執行權級又比一般權級還高, 使得我們的程式收不到來自一般權級程式送來的訊息. 辦法還是有的, 我們可以透過 ChangeWindowMessageFilterEx 設定特定訊息的過濾行為.


更多資訊:
Windows Vista Application Development Requirements for User Account Control Compatibility

沒有留言:

張貼留言