輔助技術的安全性考慮

輔助技術是在 Windows 桌面上執行的應用程式,可協助輔助功能使用者與電腦上執行的作業系統和其他應用程式互動,包括新 Windows UI 中的應用程式。 輔助技術應用程式的運作方式是從操作系統和其他應用程式擷取資訊,然後以使用者可存取的方式呈現資訊。 輔助技術應用程式也可以根據使用者的輸入,以程式設計方式「驅動」操作系統和其他應用程式。

輔助技術應用程序的本質要求它們跨越進程界限,而且他們能夠存取以比本身更高的完整性層級執行的進程。 (輔助技術應用程式在 IL 中執行。例如,當使用者嘗試執行需要系統管理許可權的工作時,Windows 會顯示一個對話方塊,要求使用者同意繼續。 此對話框會在較高的 IL 執行,以防止其跨進程通訊,讓惡意軟體無法模擬使用者輸入。 同樣地,桌面登入畫面會在較高的 IL 執行,以防止其他進程存取它。

輔助技術應用程式通常需要存取受保護的系統 UI 元素,或可能以較高許可權層級執行的其他進程。 因此,輔助技術應用程式必須由系統信任,而且必須以特殊許可權執行。

若要存取較高的 IL 程式,輔助技術應用程式必須在應用程式的指令清單中設定 UIAccess 旗標,並由具有系統管理員許可權的用戶啟動。

注意

訪問許可權受到限制,如下所示:

  • 指令清單中沒有UIAccess的應用程式會以中IL開頭,且無法存取提升許可權的 (“medium+” IL) 進程 UI。
  • 在指令清單中具有UIAccess且由不在系統管理員群組的使用者啟動、啟動為 “medium+” IL 且無法存取提升許可權的UI(沒有任何執行為「高」IL 的應用程式,例如透過 滑鼠右鍵啟動的應用程式 -> 以系統管理員身分執行)。
  • 應用程式具有UI存取權,而且由系統管理員用戶啟動為「高」IL,而且可以存取提升許可權的UI,因為它具有相同的IL。

UIAccess不足以讓行程透過 IL 界限向上移動。

除了能夠存取較高的 IL 程式之外,具有這些許可權的輔助技術應用程式可以隨時以 z 順序作為最上層的應用程式執行,這表示每當使用者需要輔助技術應用程式時都可以看見且可供使用。

重要

先前列出的案例都無法存取在系統 IL 下執行的 UI。 只有當行程是在 SYSTEM (和 system IL) 下的用戶帳戶控制 (UAC) 桌面中啟動時,才可能這樣做。 在此情況下,設定 UIAccess 沒有任何作用。

輔助技術應用程式的UIAccess需求

輔助技術應用程式是 Windows Windows 傳統型應用程式,可與桌面上執行的其他進程互動,以及在新的 Windows UI 中,從系統和應用程式取得資訊。 輔助技術應用程式接著可以將資訊提供給輔助功能使用者。

輔助技術應用程式可藉由在應用程式指令清單中設定 UIAccess 旗標來存取其他進程。 若要使用UIAccess旗標,輔助技術應用程式必須符合下列需求。

  • 需要顯示、互動或反映來自另一個應用程式的資訊,以提供輔助功能案例和/或的資訊
  • 需要以最上層視窗的形式執行,才能取得或顯示這項資訊。

若要使用UIAccess,輔助技術應用程式需要:

  • 使用憑證簽署,以與以較高許可權層級執行的應用程式互動。
  • 受到系統信任。 應用程式必須安裝在需要使用者帳戶控制 (UAC) 提示才能存取的安全位置。 例如,Program Files 資料夾。
  • 使用包含 uiAccess 旗標的指令清單檔來建置。

不應該使用 UIAccess:

  • 由非輔助技術的應用程式。

  • 透過輔助技術應用程式,顯示與其目標輔助功能案例無關的資訊或 UI。

  • 依只想要出現在新 Windows UI 中其他應用程式上方的應用程式。

    注意

    針對新 Windows UI 開發的應用程式沒有 UIAccess 做為可用選項。

     

在應用程式指令清單檔中設定UIAccess

若要取得受保護系統 UI 的存取權,應用程式必須以指令清單檔中包含特殊屬性的指令清單檔案來建置。 這個 uiAccess 屬性包含在 requestedExecutionLevel 標記中,如下列程式碼範例所示。

<trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> 
    <security> 
        <requestedPrivileges> 
        <requestedExecutionLevel 
            level="highestAvailable" 
            uiAccess="true" /> 
        </requestedPrivileges> 
    </security> 
</trustInfo> 

此程式代碼中層級屬性的值只是範例。

UIAccess 預設為 「false」。。 如果省略 屬性,或沒有指令清單,則應用程式無法取得受保護UI的存取權。

如需 Windows 安全性、簽署應用程式及建立指令清單的詳細資訊,請參閱 Windows Vista 和 Windows Server 2008 開發人員案例:用戶帳戶控制的 Windows Vista 應用程式開發需求(UAC)。

UI 自動化基礎