Vista/Window7上UAC相关问题/Manifest/WINSXS/PCA

本文详细介绍了Vista/Win7中UAC带来的问题及解决方案,包括权限提升限制、程序自动判断机制、文件/注册表虚拟化、CreateProcessWithLogonW API的使用限制以及PCA(程序兼容性助手)。同时,讨论了Manifest文件在权限管理和程序兼容性中的作用,并解析了Winsxs目录在并行程序集中的角色。
摘要由CSDN通过智能技术生成

Vista/Win7/Windows Server 2008,加入了UAC功能,这就给开发带来了很多问题,总结了一下碰到的问题和解决办法。
1)权限提升之前,即使是管理员权限帐号(built-in Administrator除外)登陆,也不能向根目录,C:/windows, C:/program files等目录下写文件。
   还有也不能访问其他用户的私有文件夹,比如其他用户的Desktop文件夹等,原因是在没有提升权限之前,当前进程仍然只持有普通用户权限的access token,只有提升权限之后,才真正具有管理员权限的token.

2)有时候执行一个安装程序,UAC的权限提升询问对话框(就是屏幕变暗那个)就会弹出来,Windows怎么知道这个程序需要权限提升才能执行呢?
a) 编译的时候加入manifest:<requestedExecutionLevel level="requireAdministrator" uiAccess="false"/>
   反过来,如果不希望提升,就指定为level="asInvoker"。下面会谈到,某些时候Windows也会误认为你的程序需要提升权限,本来是不需要。
   但是这样有可能在WindowXP SP2造成程序崩溃的问题。
   产生这个问题,目前已知的原因:手动编辑 manifest 文件导致的;使用 Visual Studio 2005 自动产生 manifest 文件导致的。
   解决办法:http://support.microsoft.com/kb/921337/en-us
b) 如果不包含manifest文件,或者没有指定requestedExecutionLevel,那么将会启用文件/注册表虚拟机制。
    Windows使用虚拟机制来帮助保护文件和注册表。传统的windows程序经常会在系统目录或者HKEY_LOCAL_MACHINE\SOFTWARE注册表项下写文件,但是vista之后,这些系统目录或者注册表项默认是受到保护的,普通权限的用户并没有修改权限。为了兼容这些所谓的遗留(legacy application)的windows程序,不至于在vista/win7上这些程序不能使用,vista之后才用虚拟机制来重定向这些文件/注册表项目到用户目录/注册表项。
-(%programfiles%, %ProgramData%, %SystemRoot%) 重定向到 C:\Users\User_name\AppData\Local\VirtualStore\Program Files\Application_name
-HKEY_LOCAL_MACHINE\SOFTWARE重定向到HKEY_CURRENT_USER\Software\Classes\VirtualStore
File and registry virtualization helps users who have restricted access to the registry and to the file system write to these protected areas. Virtualization creates a "per user" copy and then redirects successive data operations. For example, assume that an application is running under a Lim

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值