Virtualize file and registry

В этой статье рассмотрим виртуализацию файловой системы и реестра (Virtualize file and registry). Посмотрим на практике, как это всё работает.

Виртуализация файловой системы и реестра

При выполнении приложения оно может запускаться под разными пользователями, поэтому данные приложения для конкретного пользователя хранятся в каталоге пользователя: «C:Users<username>AppData«, а настройки в пользовательском разделе реестра «HKEY_CURRENT_USERSoftware«. Существуют приложения, которые хотят вместо этих мест хранить свои данные в каталогах («C:Program Files«) или в разделах реестра, которые для них недоступны. Это устаревшие приложения и Windows тут идет на хитрость.

Устаревшее приложение пытается записать что нибудь в «C:Program Files«, при этом у приложения нет доступа на запись в этот каталог. Система это замечает и перенаправляет запись в «C:Users<username>AppData«. Если приложение пытается что-то считать из «C:Program Files«, то система вначале перенаправляет считывание в «C:Users<username>AppData«, а если в этом каталоге нет нужной информации, то разрешает считать данные из «C:Program Files«. По этому же алгоритму работа ведется и с реестром. Это называется виртуализацией файловой системы и реестра.

 

Такая виртуализация работает если приложение:

 

  • не является 64-разрядным. Считается что 64-разрядное приложение не может быть устаревшим, и должно быть написано в соответствии с современными стандартами;
  • не работает с административными правами. Так как в противном случае у приложения будет возможность писать и каталог и в реестр;
  • не является службой.

 

Статус виртуализации процесса можно посмотреть в «Диспетчере задач»:

 

Виртуализация UAC
Виртуализация UAC

 

Если статус «Отключено», то виртуализацию можно включить, нажав правой кнопкой мыши по процессу.

 

Эксперимент с файловой системой

 

Откройте командную строку без повышения привилегий и перейдите в каталог c:windows:

 

>cd c:windows

 

Включите виртуализацию для этого процесса (cmd.exe):

 

Включение виртуализации UAC

 

Создайте файл из командной строки:

 

>echo hello-1 test.txt

 

Прочитайте этот файл:

>type test.txt
hello-1

Отключите виртуализацию для этого процесса в диспетчере задач, а затем попытайтесь опять прочитать этот файл из командной строки:

>type test.txt
Не удается найти указанный файл.

На этот раз файл не будет найден.

Теперь посмотрим куда на самом деле был сохранился этот файл? А был он сохранен в каталоге:

>type C:Users<username>AppDataLocalVirtualStoreWindowstest.txt
hello-1

Или можно заменить C:Users<username>AppDataLocal переменной %LOCALAPPDATA%:

>type %LOCALAPPDATA%VirtualStoreWindowstest.txt
hello-1
Друзья помогите этому контенту стать доступнее в социальных сетях.

Не проходи мимо жмакни по кнопке возможно кому то еще он будет полезен!