Как отключить VirtualStore для программ на C++?

Я хотел бы, чтобы моя программа выдавала ошибку, когда она пытается создать файлы в защищенных местах, таких как корень диска C: (например: FILE* FileHandle = fopen("file.txt", a)). Вместо этого файл создается в виртуальном хранилище в %APPDATA%.

Как отключить этот виртуальный магазин?

спасибо

EDIT: просто чтобы быть ясным, я не спрашиваю, как обойти безопасность и создать мой файл в защищенном месте. Я хочу, чтобы создание файла не удалось, чтобы я мог сказать пользователю, что он был идиот.

3 ответов


добавить манифест приложения. Выбрать значение asinvoker, значение highestavailable или requireadministrator. Похоже, вы хотите asInvoker.

от 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

лучше всего, как отметил Адам Марас, установить requestedExecutionLevel в вашем приложении, добавив манифест. RequestedExecutionLevel "asInvoker" приведет к сбою файловых операций в защищенных местоположениях, а не перенаправлению в виртуальное хранилище или запросу на повышение.


вот статья, которая показывает, как отключить виртуализацию.

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

короче:

-из сферы запуска Windows 7 выполните поиск локальной политики безопасности и выберите ее.

-разверните Локальные политики и нажмите на параметры безопасности. На правой панели прокрутите весь путь вниз, и вы найдете параметр под названием " пользователь Управление учетными записями: виртуализация сбоев записи файлов и реестра в пользовательские местоположения", дважды щелкните этот параметр и измените его на Отключено.