UAC是什麼?
UAC的全稱是User Account Control(使用者賬戶控制),它是Windows Vista提供的一個安全特性。它會在使用者使用計算機進行更改系統設定或者安裝軟體等會影響到系統安全性、穩定性的操作時彈出一個對話框,友善的提示使用者他們要進行的操作。
當使用者使用Windows Vista時,預設是啟用UAC的。無論使用者以什麼身份登入Windows Vista計算機,即使他以管理者的身份登入計算機,都隻具有普通使用者的權限。當使用者執行一些安裝操作或者設定操作時,Vista系統會彈出一個對話框,提示使用者他們要進行的操作。在這個過程中,如果您使用的是管理者的賬号登入Windows Vista,那麼隻需要點選“Continue”或者“Allow”就可以繼續進行操作了。點選的時候,UAC進行了一次權限的提升,這時管理者才是真正具有了管理者的權限。如果是以普通使用者登入計算機,當他們執行這樣的操作時,Windows Vista會彈出一個對話框,讓這個普通使用者輸入一個管理者的賬号和密碼。而在以前的Xp系統中,如果我們是普通使用者,我們就不可能進行這樣的操作,但是在Vista中它也提供了這樣的操作,隻是你必須知道管理者的賬号和密碼。
這個功能可以人為的禁用和開啟嗎?
是可以的,Windows Vista是提供了相關的工具的。
方法一:msconfig.exe 工具
在開始菜單->運作->輸入"msconfig" 回車。就會啟動msconfig。點選Tools 标簽,如圖:

msconfig提供了啟用、禁用UAC功能的兩個選項,選中,然後點選Launch按鈕,就設定成功了。啟用新的設定需要重新啟動計算機。
其實我們可以從該工具執行的指令中,可以看出是通過設定系統資料庫來實作UAC功能的啟用和禁用的。
C:\Windows\System32\cmd.exe /k %windir%\System32\reg.exe ADD HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System /v EnableLUA /t REG_DWORD /d 0 /f
在系統資料庫的HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\System 下EnableLUA 鍵是用來控制UAC功能的啟用和暫停,1代表啟用UAC功能;0代表禁用UAC功能。這也就不難解釋為什麼修改UAC設定後,需要重新啟動計算機了。
本地安全政策的相關設定:
在開始菜單->運作->輸入"secpol.msc" 啟動本地安全政策控制台。在"本地安全政策"(Local Policies)節點下"安全選項"(Security Option)子節點中有9個UAC相關的政策。
程式設計相關
如果您編寫的程式需要較高的權限運作,可以為您程式建立一個manifest檔案。在manifest檔案中加入需要提升權限的描述:
app.manifest
1
<?xml version="1.0" encoding="utf-8"?>
2
<asmv1:assembly manifestVersion="1.0" xmlns="urn:schemas-microsoft-com:asm.v1" xmlns:asmv1="urn:schemas-microsoft-com:asm.v1" xmlns:asmv2="urn:schemas-microsoft-com:asm.v2" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3
<assemblyIdentity version="1.0.0.0" name="DemoUACApp.app"/>
4
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
5
<security>
6
<requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
7
<requestedExecutionLevel level="requireAdministrator"/>
8
</requestedPrivileges>
9
</security>
10
</trustInfo>
11
</asmv1:assembly>
這樣,編譯後的程式圖示上就會出現那個小盾牌了。我做了一個實驗,嘗試用程式在系統盤的Program Files檔案夾下建立一個子檔案夾,并在該檔案夾中建立一個普通的文本檔案。
實驗結果如下:
1) 在app.manifest檔案中配置了提升權限的選項。以普通賬戶運作程式,出現安全提示詢問是否運作。點選"允許"後,程式能夠正常運作。通過資源浏覽器發現Program Files檔案夾下新建立的檔案夾和檔案都存在。符合預期。
2) 删除app.manifest檔案,重新編譯程式。以普通賬戶運作程式,未見安全提示。發現程式仍然能夠正常運作。但程式新建立的檔案夾和檔案在資源浏覽器中不可見,通過代碼仍然能夠正常讀取建立的檔案夾和檔案。有點兒出乎意外的說。
既然通過代碼能夠正常讀取,說明檔案确實在硬碟上存在。使用Administrator賬戶登入,發現以Administrator身份浏覽檔案夾時新建立的檔案和檔案夾可見。這就有點兒怪了,呵呵。Debug了一下代碼,暫未發現在哪部分代碼中進行了提權操作。但是,這提示我們如果在程式設計時不注意UAC問題,有可能會造成未知結果。
小貼士
其實,對于開發人員來說,在Vista下UAC造成的最多的"小麻煩"就是使用Visual Studio 建立Web應用(包括WebApp和WebService)時一定要記得"Run as Administrator",否則會因為權限不夠而建立工程失敗。或是使用Sql Management Studio Express時因忘了"Run as Administrator"而連不上SQL Server的服務。
您可以打開程式快捷方式的屬性對話框,在"快捷方式"标簽下有一個"進階按鈕",打開後,勾選"Run as Administrator"選項,儲存。這樣您就可以每次使用滑鼠左鍵單擊打開您的Visual Studio建立您的Web應用了。隻是每次的"允許"動作依然要有。如圖:
感受
UAC總的來說,想法不錯。但是,這是建立在使用者的"火眼金睛"的基礎上的。MS不能要求所有的使用者都是程式員、ITPro的水準吧?對于程式員、ITPro來說,Run as Administrator也許是一個警告,但又有幾個普通使用者看得懂呢?我個人感覺,這個UAC對前幾年那種冒用MS名義發出的打Hotfix的欺騙郵件形式的入侵,還是一點兒作用不起。打Hotfix,就要動系統檔案,需要Administrator權限也理所應當。可一旦給了安裝程式管理者權限,機器照樣還是後門大開……
轉載于:https://www.cnblogs.com/michaellee/archive/2008/02/13/1068133.html