以前一直把UAC關掉,所以沒察覺UAC的作用。現在把UAC打開了,越來越好奇,什麼樣的程序行為才會觸發UAC彈窗?如果是載入驅動、調用服務,無可厚非。但是很多程序其實並沒有做這些操作,運行的時候還是會觸發UAC彈窗。

在開啟UAC功能的情況下,有些程序右下角都會有一個小盾牌的標誌,運行他們會觸發UAC彈窗,那Windows是怎麼去判斷這個程序是否需要提權呢?網上搜索了一下,貌似只看到UAC功能的介紹,沒找到Windwos怎麼判斷的原理。


首先不是程序行為觸發了 UAC,而是程序自己要求 UAC 提權的。因為在 UAC 啟用的情況下,用戶運行的程序都會被降低許可權,程序由於許可權不足,就無法寫入系統敏感區域,於是就只能請求 UAC 提權。程序圖標右下角的小盾牌一般是程序內嵌了 manifest 文件,告訴系統這個程序需要提權,所以系統就顯示一個小盾牌,並在程序啟動時彈出 UAC 對話框。還有一種可能就是系統檢測到程序是安裝包(如文件名包含 setup.exe),就會在它啟動時自動向用戶請求 UAC 提權。具體哪些操作需要 UAC 提權後才能進行:1. 寫入帶高完整性標籤的資源(如 C:Program Files, HKLM)

2. 寫入管理員許可權才能寫入的資源

3. 執行大部分特權操作(如 SeLoadDriver, 即載入驅動)
1. 程序在編譯的時候Manifest文件設置了 Enable User Account Control(UAC), highestAvailable或者requireAdministrator,在雙擊的時候將請求UAC。2. ShellExecute使用"runas"參數,將動態請求UAC。
1. 文件操作(修改由管理員用戶組創建的文件/文件夾或系統文件/文件夾時,如一般的program files,windows文件夾下的東西)

2. 註冊表操作,修改HKLM下的內容

3. windows自己的一些腦殘的規則,比如exe命名為install或者uninst, uninstall之類的,也會要求提權
在程序編譯的時候 程序員可以在程序中加一條注釋告訴OS該程序需要提權。


推薦閱讀:
查看原文 >>
相关文章