Как отключить VirtualStore для программ на C ++? - PullRequest
7 голосов
/ 19 января 2011

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

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

Спасибо

РЕДАКТИРОВАТЬ: Просто чтобы быть ясно, я не спрашиваю, как обойти безопасность и создать мой файл в защищенном месте. Я хочу, чтобы создание файла завершилось неудачно, чтобы я мог сказать пользователю, что он идиот.

Ответы [ 3 ]

17 голосов
/ 19 января 2011

Вы добавляете манифест приложения. Выберите asInvoker, highAvailable или 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>
6 голосов
/ 20 января 2011

С MSDN :

Виртуализация включена только для:

  • 32-битные интерактивные процессы
  • Администратор записываемый файл / папка и ключи реестра

Виртуализация отключена для:

  • 64-битные процессы
  • Неинтерактивные процессы
  • Процессы, которые олицетворяют
  • абоненты режима ядра
  • Исполняемые файлы, которые имеют требуемыйExecutionLevel

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

3 голосов
/ 30 декабря 2013

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

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

Суть этого:

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

-Разверните локальные политики и нажмите Параметры безопасности. На правой панели прокрутите весь путь до конца, и вы найдете параметр «Контроль учетных записей пользователей: виртуализировать ошибки записи файлов и реестра в местоположения для каждого пользователя», дважды щелкните этот параметр и измените его на Отключено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...