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

msconfig提供了啟用、禁用UAC功能的兩個選項,選中,然后點擊Launch按鈕,就設(shè)定成功了。啟用新的設(shè)置需要重新啟動計算機。
其實我們可以從該工具執(zhí)行的命令中,可以看出是通過設(shè)定注冊表來實現(xiàn)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設(shè)定后,需要重新啟動計算機了。
本地安全策略的相關(guān)設(shè)定:
在開始菜單->運行->輸入"secpol.msc" 啟動本地安全策略控制臺。在"本地安全策略"(Local Policies)節(jié)點下"安全選項"(Security Option)子節(jié)點中有9個UAC相關(guān)的策略。

編程相關(guān)
如果您編寫的程序需要較高的權(quán)限運行,可以為您程序創(chuàng)建一個manifest文件。在manifest文件中加入需要提升權(quán)限的描述:
xml version="1.0" encoding="utf-8">
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">
assemblyIdentity version="1.0.0.0" name="DemoUACApp.app"/>
trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
security>
requestedPrivileges xmlns="urn:schemas-microsoft-com:asm.v3">
requestedExecutionLevel level="requireAdministrator"/>
/requestedPrivileges>
/security>
/trustInfo>
/asmv1:assembly>
這樣,編譯后的程序圖標上就會出現(xiàn)那個小盾牌了。我做了一個實驗,嘗試用程序在系統(tǒng)盤的Program Files文件夾下創(chuàng)建一個子文件夾,并在該文件夾中創(chuàng)建一個普通的文本文件。
實驗結(jié)果如下:
1) 在app.manifest文件中配置了提升權(quán)限的選項。以普通賬戶運行程序,出現(xiàn)安全提示詢問是否運行。點擊"允許"后,程序能夠正常運行。通過資源瀏覽器發(fā)現(xiàn)Program Files文件夾下新創(chuàng)建的文件夾和文件都存在。符合預(yù)期。
2) 刪除app.manifest文件,重新編譯程序。以普通賬戶運行程序,未見安全提示。發(fā)現(xiàn)程序仍然能夠正常運行。但程序新創(chuàng)建的文件夾和文件在資源瀏覽器中不可見,通過代碼仍然能夠正常讀取新建的文件夾和文件。有點兒出乎意外的說。
既然通過代碼能夠正常讀取,說明文件確實在硬盤上存在。使用Administrator賬戶登錄,發(fā)現(xiàn)以Administrator身份瀏覽文件夾時新創(chuàng)建的文件和文件夾可見。這就有點兒怪了,呵呵。Debug了一下代碼,暫未發(fā)現(xiàn)在哪部分代碼中進行了提權(quán)操作。但是,這提示我們?nèi)绻诰幊虝r不注意UAC問題,有可能會造成未知結(jié)果。
小貼士
其實,對于開發(fā)人員來說,在Vista下UAC造成的最多的"小麻煩"就是使用Visual Studio 創(chuàng)建Web應(yīng)用(包括WebApp和WebService)時一定要記得"Run as Administrator",否則會因為權(quán)限不夠而創(chuàng)建工程失敗?;蚴鞘褂肧ql Management Studio Express時因忘了"Run as Administrator"而連不上SQL Server的服務(wù)。
您可以打開程序快捷方式的屬性對話框,在"快捷方式"標簽下有一個"高級按鈕",打開后,勾選"Run as Administrator"選項,保存。這樣您就可以每次使用鼠標左鍵單擊打開您的Visual Studio創(chuàng)建您的Web應(yīng)用了。只是每次的"允許"動作依然要有。如圖:

感受
UAC總的來說,想法不錯。但是,這是建立在用戶的"火眼金睛"的基礎(chǔ)上的。MS不能要求所有的用戶都是程序員、ITPro的水平吧?對于程序員、ITPro來說,Run as Administrator也許是一個警告,但又有幾個普通用戶看得懂呢?我個人感覺,這個UAC對前幾年那種冒用MS名義發(fā)出的打Hotfix的欺騙郵件形式的入侵,還是一點兒作用不起。打Hotfix,就要動系統(tǒng)文件,需要Administrator權(quán)限也理所應(yīng)當(dāng)。可一旦給了安裝程序管理員權(quán)限,機器照樣還是后門大開……