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

本文介绍了Windows系统中用户帐户控制(UAC)虚拟化的功能与使用方法,包括如何在任务管理器中查看UAC虚拟化进程,以及UAC如何通过虚拟化技术改善应用程序的兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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, 创建子目录同样如此

  注:本段的讨论基于程序已非管理员身份启动

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值