...when altering one's mind becomes as easy as programming a computer, what does it mean to be human?..
3 октября 2008 г.
Несколько слов о виртуализации в Vista
Виртуализация позволяет работать в Vista старым кривым программам, которые пытаются писать свои даные в не предназначенные для этого места (Program Files, Windows и т.п.).
Она предназначена только для обеспечения совместимости.
Если такая програма под обычным пользователем пытается писать файл, например, в Program Files, то вместо этого она будет работать с файлом в папке C:\Users\<имя-пользователя>\AppData\Local\VirtualStore\Program Files. Очевидно, что для новой программы такая попытка приведёт к возврату ошибки "в доступе отказано". Кроме того, также очевидно, что такая старая программа будет работать только в Vista, в XP она не работала изначально (имеется ввиду - под обычным пользователем).
Виртуализирован ли процесс можно определить в диспетчере задач (Task Manager) - просто добавьте столбец "Виртуализация". Для программного определения, виртуализирован ли процесс, нужно получить его токен и вызвать GetTokenInformation с TokenVirtualizationEnabled (TOKEN_INFORMATION_CLASS Enumeration).
Как Windows определяет, старая программа или новая?
Виртуализация включается если:
- процесс 32-разрядный.
- процесс запущен интерактивным пользователем.
Виртуализация не включается:
- если процесс 64-разрядный
- для процессов администратора
- для служб
- для вызовов с олицетворением
- для приложений с манифестом, в которых указан requestedExecutionLevel
Как отключить виртуализацию? Во-первых - можно создать стандартный манифест с настройками (см. например). Во-вторых, используя SetTokenInformation с TokenVirtualizationEnabled можно отключить виртуализацию программно. И, наконец, можно щёлкнуть правой кнопкой по процессу в Диспетчере Задач и выключить её из контекстного меню.
2 комментария :
Можно использовать некоторые HTML-теги, например:
<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>
Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и (опционально) ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.
Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.
Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.
Примечание. Отправлять комментарии могут только участники этого блога.
Да, кстати, забыл сказать: поскольку D2007 и выше создают программы, совместимые с Vista, то в них уже включён манифест - т.е. для программ, собранных в D2007 и выше виртуализация уже отключена.
ОтветитьУдалитьПравда, манифест включается только, если вы включили галочку "Enable run-time themes", иначе - добавлять его надо ручками. Например, это нужно, если вам нужен другой уровень, отличный от умалчиваемого asInvoker.
См. также: http://mda-delphi.blogspot.com/2009/02/vista-uac-delphi-2.html
Спасибо за ссылку на mda-delphi!
ОтветитьУдалить