如何禁用C ++程序的VirtualStore?

当我试图在C:\驱动器的根目录(例如: FILE* FileHandle = fopen("\\file.txt", a) )的受保护位置创build文件时,我想让程序抛出一个错误。 而是在%APPDATA%下的虚拟存储中创build文件。

我怎样才能禁用该虚拟商店?

谢谢

编辑:只是要清楚,我不问如何规避安全性,并在受保护的位置创build我的文件。 我希望文件创build失败,以便我可以告诉用户他是一个白痴。

您添加一个应用程序清单。 选择asInvoker,highestAvailable或requireAdministrator。 这听起来像你想要的InVoker。

http://msdn.microsoft.com/en-us/library/bb756929.aspx

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0"> <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="IsUserAdmin" type="win32"/> <description>Description of your application</description> <!-- Identify the application security requirements. --> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v2"> <security> <requestedPrivileges> <requestedExecutionLevel level="asInvoker" uiAccess="false"/> </requestedPrivileges> </security> </trustInfo> </assembly> 

来自MSDN :

虚拟化仅适用于:

  • 32位交互式进程
  • 管理员可写文件/文件夹和注册表项

虚拟化已被禁用:

  • 64位进程
  • 非交互式进程
  • 模仿的过程
  • 内核模式的调用者
  • 具有requestedExecutionLevel的可执行文件

Adam Maras指出,最好的办法是通过添加一个清单来为应用程序设置一个requestedExecutionLevel。 “asInvoker”的requestedExecutionLevel将导致文件操作在受保护位置失败,而不是重定向到虚拟商店或提示提升。

这里是一篇文章,展示如何关闭虚拟化。

http://www.interworks.com/blogs/dsmith/2011/09/21/disabling-windows-7-virtual-store

它的缺点是:

– 从Windows 7启动球体,搜索本地安全策略并选择它。

展开本地策略并单击安全选项。 在右侧窗格中,一直滚动到底部,您将找到一个名为“用户帐户控制:虚拟化文件和注册表写入每个用户位置的失败”的设置,双击该设置并将其更改为“已禁用”。