您的位置:首页 > 其它

关于win7开发需要了解的知识

2011-11-10 15:07 429 查看
1. 查看UAC虚拟化进程
在Windows7中,系统增强了用户帐户控制(UAC)虚拟化功能,通过这个功能我们可以防止系统文件、文件夹和注册表因为误操作而损坏。通过UAC可以将系统中的应用程序重新定向其它位置,但是用户还能正常使用,但是这些应用程序写入的数据不会被发送至系统位置,以帮助维护整个操作系统的稳定性。有了这种虚拟化功能,也意味着现在多个用户可以运行同一台计算机上的应用程序了,因为他们各自的数据会写入各自的位置中。起到了系统安全的效果。
使用UAC功能,我们需要在“组策略”中将其开启,在运行中键入“GPEDIT.MSC”命令,打开组策略编辑器,随后在左侧依次展开“本地计算机→Windows设置→安全设置→本地策略→安全选项”分支,在此将该分支下的“将文件及注册表写入失败虚拟化到每用户位置”设置为启用即可。
用户帐户控制虚拟化启用后,我们就可以在任务管理器查看UAC进程了。查看时,和以前的系统一样,使用“Ctrl+Alt+Del”组合热键打开“任务管理器”,切换到“进程”项下,在此单击菜单中的“查看”→“选择列”,打开“选择进程列”对话框,在此勾选“用户帐户控制(UAC)虚拟化”复选框。
随后单击“确定”按钮,随后在“进程”窗口中勾选“显示所有的用户进程”,这样我们就可以了解到系统中所有进程的虚拟化信息了。
当我们有发现系统已经对某个进程停用了虚拟化功能,如果想启用虚拟化进程时,在该进程的名称上单击右键,弹出右键菜单,随后勾选“UAC虚拟化”,这样即可启用该进程的UAC虚拟化功能。

2.UAC通过虚拟化改善程序兼容性

  在WindowsVista中,通过提供文件与注册表的虚拟化功能,可以让许多在 WindowsXP 下无法以标准用户身份运行的应用程序,不用经过修改即可在 WindowsVista 中运行。

  在 WindowsXP 中,当应用程序试图往标准用户没有访问权限的文件系统和注册表的保护区域写入数据时,程序就会崩溃。WindowsVista 则通过巧妙的机制避免了这个问题:将写入操作(以及随后的文件或注册表读取)重定向到该用户配置文件中的一个特殊位置来改善应用程序兼容性。

  例如,如果一个应用程序试图向 “C:/program files/contoso/settings.ini” 进行写入操作,但该用户没有写入该目录的权限,那么写入操作将会被重定向到 “C:/Users/用户名/AppData/Local/VirtualStore/Program Files/contoso/settings.ini”。而如果一个应用程序试图写入 “HKLM/Software/Contoso”,该操作将会被自动重定向到 “HKCU/Software/Classes/VirtualStore/MACHINE/Software/Contoso”。

  此外,WindowsVista 软件徽标认证计划中,一项基本要求便是应用程序无需虚拟化就可以按标准用户身份运行。

3.读取受限目录及权限

如果只是读取有访问权限的目录或文件,是可以的。例如如下函数

std::wstring filename = L"C:\\bixy.ini";

HANDLE hFile = CreateFile(filename.c_str(),GENERIC_READ,NULL,NULL,OPEN_EXISTING,NULL,NULL);

如果文件存在,则api调用成功

但是如果这样写

std::wstring filename = L"C:\\bixy.ini";

HANDLE hFile = CreateFile(filename.c_str(),GENERIC_READ|GENERIC_WRITE,NULL,NULL,OPEN_EXISTING,NULL,NULL);

则会访问失败,Getlasterror返回5

假如存在以下目录C:\Windows\A\B,若在此目录下创建文件c.txt, 则windows会在虚拟目录下创建对应的Windows\A\B目录,再创建文件c.txt, 创建子目录同样如此

注:本段的讨论基于程序已非管理员身份启动
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: