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