近日發現,在win2008R2 x64下運行的服務器程序,其注冊表讀取路徑為:
[HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\SZDomain\itvc1]
但是經過程序自動修改的注冊表,被自動重定向到了:
[HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\SZDomain\itvc1]
和
[HKEY_USERS\S-1-5-21-3071037507-3784486840-4086376621-1017\Software\Classes\VirtualStore\MACHINE\SOFTWARE\Wow6432Node\SZDomain\itvc1]
上面兩個位置應該是映射關系。
百度VirtualStore,發現這是 UAC虛擬化 ,從Vista系統開始,到win7 win8 win10 都有這種技術。
自己寫的程序 再用這個 就有點煩了,對於流氓軟件,倒是挺好,相當於運行在 沙箱 sandboxie 中。
----
Win7 64位系統下怎么啟用和查看UAC虛擬化進程【圖解】
第一步 運行windows 組策略 gpedit.msc
第二步 找到 “本地計算機——Windows設置——安全設置——本地策略——安全選項”;
把 用戶賬戶控制:將文件及注冊表寫入失敗虛擬化到每用戶位置 的選項設置為已禁用 。
和UAC編程相關的內容:
-------------------------------
參考《windows Vista下編寫安全的代碼》 把下面的東西編譯進資源就行了 uac.manifest <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity name="naily.pdbm.exe" processorArchitecture="x86" version="5.1.0.0" type="win32"/> <description>NAILY Soft</description> <dependency> <dependentAssembly> <assemblyIdentity type="win32" name="Microsoft.Windows.Common-Controls" version="6.0.0.0" processorArchitecture="x86" publicKeyToken="6595b64144ccf1df" language="*"/> </dependentAssembly> </dependency> <!-- Identify the application security requirements. --> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly>
那么又有新問題了,如何使用UAC虛擬化
=========================
查看UAC虛擬化的方式是:打開任務管理器,查看 【UAC虛擬化】這一列,這一列的值 主要有:啟用 停用 和不允許三種。
如何在gpedit.msc開啟可使用UAC虛擬化選項,的前提下,禁止使用UAC呢?
默認是打開UAC控制的。我的電腦把它設置為 從不通知,從任務管理器中查看,所有的進程 都是 UAC虛擬化 =》 【不允許】。
關閉UAC控制,意味着所有程序都是管理員權限,才會不允許UAC控制的。
所以想要 禁止某個程序使用UAC也可以 【使用管理員權限打開】。
如果開啟UAC的情況下,沒有使用管理員權限打開,才會出現 默認都是UAC虛擬化的。