UAC 架構

下圖詳細說明UAC架構。

描述UAC架構的圖表。

使用者

  • 用戶執行需要許可權的作業:如果作業變更文件系統或登錄,則會呼叫 Virtualization。 所有其他作業都會呼叫ShellExecute。
  • ShellExecute:ShellExecute 會呼叫 CreateProcess。 ShellExecute 會從 CreateProcess 尋找 ERROR_ELEVATION_REQUIRED 錯誤。 如果收到錯誤,ShellExecute 會呼叫應用程式資訊服務,以提升許可權的提示來嘗試執行要求的工作。
  • CreateProcess:如果應用程式需要提高許可權,CreateProcess 會拒絕使用 ERROR_ELEVATION_REQUIRED的呼叫。

系統

  • 應用程式資訊服務

    • 系統服務,可協助啟動需要一或多個提高許可權或用戶權力才能執行的應用程式。
    • 應用程式資訊服務可在需要提高許可權時,使用系統管理使用者的完整存取令牌為應用程式建立新的程式,以協助啟動這類應用程式。
    • 根據設定的原則,使用者可能會同意。
  • 提升 ActiveX 安裝

    • 如果未安裝 ActiveX,系統會檢查 UAC 滑桿層級。
    • 如果已安裝 ActiveX,則會核取 [使用者帳戶控制:在提示提高許可權時切換至安全桌面 群組原則 設定。
  • 檢查 UAC 滑桿層級:UAC 有可從四個通知層級選取的滑桿:

    • 一律通知 會:
      • 當程式嘗試安裝軟體或對計算機進行變更時通知您。
      • 當您變更 Windows 設定時通知您。
      • 凍結其他工作,直到您響應為止。
      • 如果您經常安裝新軟體或造訪不熟悉的網站,建議您使用。
    • 只有當程式嘗試對計算機進行變更時,才會通知我
      • 當程式嘗試安裝軟體或對計算機進行變更時通知您。
      • 當您對 Windows 設定進行變更時,通知您。
      • 凍結其他工作,直到您響應為止。
      • 如果您不常安裝應用程式或造訪不熟悉的網站,建議您使用。
    • 只有在程式嘗試對計算機進行變更 (不會使桌面變暗時通知我,)
      • 當程式嘗試安裝軟體或對計算機進行變更時通知您。
      • 當您對 Windows 設定進行變更時,通知您。
      • 在您回應之前,請不要凍結其他工作。
      • 不建議使用。 只有當電腦上的桌面變暗需要很長的時間時,才選擇此選項。
    • 請勿通知 (停用 UAC 提示) 會:
      • 當程式嘗試安裝軟體或對計算機進行變更時,通知您。
      • 當您對 Windows 設定進行變更時,通知您。
      • 在您回應之前,請不要凍結其他工作。
      • 基於安全性考慮,不建議使用。
  • 已啟用安全桌面:已核取 [用戶帳戶控制]:在提示提高許可權原則設定時切換至安全桌面

    • 如果已啟用安全桌面,則不論系統管理員和標準使用者的提示行為原則設定為何,所有提高許可權要求都會移至安全桌面。
    • 如果未啟用安全桌面,則所有提高許可權要求都會移至互動式使用者的桌面,並使用系統管理員和標準使用者的個別用戶設定。
  • CreateProcess

    • CreateProcess 會呼叫 AppCompat、Fusion 和 Installer 偵測,以評估應用程式是否需要提高許可權。
    • 接著會檢查檔案以判斷其要求的執行層級,該層級會儲存在檔案的應用程式指令清單中。
    • 如果指令清單中指定的要求執行層級不符合存取令牌,且將錯誤 (ERROR_ELEVATION_REQUIRED) 傳回ShellExecute,CreateProcess就會失敗。
  • AppCompat

    • AppCompat 資料庫會將資訊儲存在應用程式的應用程式相容性修正專案中。
  • 融合

    • Fusion 資料庫會儲存來自描述應用程式之應用程式指令清單的資訊。
    • 指令清單架構會更新為新增要求的執行層級欄位。
  • 安裝程式偵測

    • 安裝程式偵測會偵測安裝程式檔案,並協助防止安裝在未經用戶瞭解和同意的情況下執行。

內核

  • 虛擬化:虛擬化技術可確保不符合規範的應用程式不會以無法判斷原因的方式,以無訊息方式執行或失敗。 UAC 也提供寫入受保護區域之應用程式的檔案和登錄虛擬化和記錄。
  • 檔系統和登錄:每位使用者檔案和登錄虛擬化會將每部計算機的登錄和檔案寫入要求重新導向至對等的每個使用者位置。 讀取要求會先重新導向至虛擬化的每個使用者位置,再重新導向至每部計算機的位置。

滑桿永遠不會完全關閉UAC。 如果您將它設定為 [永不通知],它將會:

  • 讓UAC服務保持執行
  • 導致系統管理員起始的所有提高許可權要求自動核准,而不會顯示 UAC 提示
  • 自動拒絕標準使用者的所有提高許可權要求

重要

若要完全停用 UAC,您必須停用原則用戶帳戶控制:以 管理員 核准模式執行所有系統管理員。 當 UAC 停用時,某些 通用 Windows 平台 應用程式可能無法運作。

虛擬化

由於企業環境中的系統管理員會嘗試保護系統,因此許多企業營運 (LOB) 應用程式都設計成只使用標準使用者存取令牌。 因此,當 UAC 開啟時,您不需要取代大部分的應用程式。

Windows 包含檔案和登錄虛擬化技術,適用於不符合 UAC 規範且需要系統管理員存取令牌才能正確執行的應用程式。 當不符合 UAC 規範的系統管理應用程式嘗試寫入受保護的資料夾,例如 Program Files 時,UAC 會提供應用程式自己的虛擬化檢視,以檢視它嘗試變更的資源。 虛擬化復本會保留在使用者的配置檔中。 此策略會為每個執行不符合規範應用程式的使用者建立虛擬化檔案的個別複本。

大部分的應用程式工作會使用虛擬化功能來正常運作。 雖然虛擬化可讓大部分的應用程式執行,但這是短期修正,而不是長期解決方案。 應用程式開發人員應該儘快將其應用程式修改為符合規範,而不是依賴檔案、資料夾和登錄虛擬化。

在下列案例中,虛擬化不是一個選項:

  • 虛擬化不適用於已提升許可權且使用完整系統管理存取令牌執行的應用程式
  • 虛擬化僅支援32位應用程式。 無限制的64位應用程式在嘗試取得 windows 物件的唯一標識子) (句柄時,會收到拒絕存取的訊息。 原生 Windows 64 位應用程式必須與 UAC 相容,並將數據寫入正確的位置
  • 如果應用程式包含具有要求執行層級屬性的應用程式指令清單,則會停用虛擬化

要求執行層級

應用程式指令清單是一個 XML 檔案,可描述並識別應用程式應該在運行時間系結至的共用和私用並存元件。 應用程式指令清單包含用於 UAC 應用程式相容性的專案。 在應用程式指令清單中包含項目的系統管理應用程式會提示使用者提供存取使用者存取令牌的許可權。 雖然它們在應用程式指令清單中沒有專案,但大部分的系統管理應用程式都可以使用應用程式相容性修正來執行,而不需要修改。 應用程式相容性修正是資料庫專案,可讓不符合 UAC 規範的應用程式正常運作。

所有符合 UAC 規範的應用程式都應該將要求的執行層級新增至應用程式指令清單。 如果應用程式需要系統管理存取權,則將應用程式標示為要求的執行層級 需要系統管理員 確保系統將此程序識別為系統管理應用程式,並執行必要的提高許可權步驟。 要求的執行層級會指定應用程式所需的許可權。

安裝程式偵測技術

安裝程式是專為部署軟體而設計的應用程式。 大部分的安裝程式都會寫入系統目錄和登錄機碼。 這些受保護的系統位置通常只能由安裝程式偵測技術中的系統管理員撰寫,這表示標準用戶沒有足夠的存取權來安裝程式。 Windows 啟發式偵測安裝程式,並要求系統管理員使用者的系統管理員認證或核准,以便以訪問許可權執行。 Windows 也會以啟發學習方式偵測卸載應用程式的更新和程式。 UAC 的設計目標之一是防止安裝在使用者不知情且未經同意的情況下執行,因為安裝程式會寫入檔系統和登錄的受保護區域。

安裝程式偵測僅適用於:

  • 32 位可執行檔
  • 沒有要求執行層級屬性的應用程式
  • 以已啟用UAC的標準使用者身分執行的互動式進程

在建立32位進程之前,會檢查下列屬性以判斷它是否為安裝程式:

  • 檔名包含關鍵詞,例如「安裝」、「安裝程式」或「更新」。
  • 版本設定資源欄位包含下列關鍵詞:廠商、公司名稱、產品名稱、檔案描述、原始檔名、內部名稱和導出名稱。
  • 並存指令清單中的關鍵詞會內嵌在可執行檔中。
  • 特定 StringTable 專案中的關鍵詞會連結在可執行檔中。
  • 資源文本數據中的關鍵屬性會連結在可執行檔中。
  • 可執行檔包含以位元組為目標的序列。

注意

關鍵詞和位元組序列衍生自各種安裝程式技術觀察到的常見特性。

注意

用戶帳戶控制:必須啟用偵測應用程式安裝和提示提高許可權原則,安裝程式偵測才能偵測安裝程式。 如需詳細資訊,請參閱 用戶帳戶控制設定清單