9

Я установил MinGW и MSYS и никогда не задумывался о том, как работают двоичные файлы. Однако сегодня я открыл Process Explorer и понял, что у меня есть некоторые виртуализированные процессы:

Список процессов

Я знаю, что обычно make/gcc/sh/mintty для POSIX/unix-подобных систем, однако я думал, что проекты MinGW/MSYS будут содержать собственные исполняемые файлы. Виртуализация - это обычно термин, который я ассоциирую с виртуальными машинами, и он меня немного смущает. Диспетчер задач фактически вызывает соответствующий столбец "Виртуализация UAC".

Так что же означает виртуализированный флаг в Windows? Это какой-то уровень совместимости для исполняемых файлов до Vista?

2 ответа2

8

По сути, это «оболочка» файловой системы и реестра, которая перенаправляет попытки записи в файл, если у пользователя нет правильных разрешений на запись, см. Статью Википедии о UAC для получения дополнительной информации:

Приложения, написанные с допущением, что пользователь будет работать с правами администратора, испытывали проблемы в более ранних версиях Windows при запуске с ограниченными учетными записями пользователей, часто из-за того, что они пытались выполнить запись в машинные или системные каталоги (такие как Program Files) или ключи реестра (особенно HKLM). UAC пытается облегчить это с помощью виртуализации файлов и реестра, которая перенаправляет записи (и последующие операции чтения) в расположение пользователя в профиле пользователя.

Например, если приложение пытается выполнить запись в каталог, такой как «C:\Program Files\appname\settings.ini», для которого у пользователя нет разрешения на запись, запись будет перенаправлена в «C:\Users\username». \AppData \Local \VirtualStore \Program Files\appname\settings.ini ". Функция перенаправления предоставляется только для 32-разрядных приложений без повышенных прав и только в том случае, если они не содержат манифест, запрашивающий определенные привилегии.

7

Подмастерье Гик объясняет, что такое виртуализация. Я объясню, как Windows определяет необходимость виртуализации.

ОС просматривает файл манифеста приложения (или PE-ресурс), и если манифест вообще не найден или не имеет соответствующего раздела compatibility - Windows предполагает, что приложение "старое" и включает виртуализацию.

<compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
 <application>
   <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"></supportedOS>
   <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"></supportedOS>
 </application>
</compatibility>

PS. Виртуализация работает с ключами реестра (под), такими как HKEY_LOCAL_MACHINE и HKEY_CURRENT_USER\Software\Classes\VirtualStore\MACHINE .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .