Дело о таинственных файлах на рабочем столе
Несколько недель назад моя жена сказала мне, что иногда в папке Desktop ее компьютера появлялись файлы, которые не отображались на самом рабочем столе. Она заговорила об этом не только потому, что была удивлена несоответствием, но так как она хотела переместить некоторые из этих таинственных файлов в другие папки. Откровенно говоря, я не понял, о чем она говорит, хотя для меня это совершенно неудивительно, поэтому я сказал ей, чтобы когда она в следующий раз увидит эти таинственные файлы, она позвала меня.
Несколько дней спустя я вернулся домой с работы и моя жена встретила меня у дверей, объяснив, что проблема снова повторилась, и она оставила окно открытым, чтобы показать мне эти таинственные файлы. Я с предвкушением подошел к компьютеру и изучил ситуацию. На компьютере было открыто окно IE, развернутое на весь экран, с большим количеством открытых вкладок с открытыми письмами. На переднем плане было открыто диалоговое окно IE "Открыть файл", в котором отображался список файлов в папке Desktop, возникающее при щелчке по кнопке "Присоединить файл". Диалоговое окно выглядело следующим образом:
Я свернул окно IE, чтобы увидеть сам рабочий стол, который находился на фоне, и убедился, что несколько файлов, которые присутствовали в диалоговом окне, в частности, папка Maui Feb. 08 и JPG-файлы CIMG13xx, отсутствовали. Я открыл окно Windows Explorer, чтобы зайти в папку Desktop, чтобы посмотреть, будут ли видны эти файлы в проводнике, но там также ничего не было:
Раньше я никогда с таким не сталкивался. Я знал, что это работа для Process Monitor. Так как на компьютере моей жены инструментов Sysinternals не установлено (грустно, но правда), я запустил их прямо из сети, используя адрес Sysinternals Live - live.sysinternals.com\tools\procmon.exe. С помощью функции Process Monitor записывающей активность я закрыл и снова открыл диалоговое окно выбора файлов в редакторе почты и начал искать CIMG - набор имен файлов, многие из которые отображались в диалоговом окне выбора файлов, но не в Windows Explorer. Первое совпадение произошло при перечислении операций с папками, содержащих такие имена файлов, которые показываются в самой правой колонке Details:
Файлы находились в профиле пользователя в папке Appdata\Local\Microsoft\Windows\Temporary Internet Files\Virtualized\C\Users\Daryl\Desktop. Папка Virtualized является создается IE7 при запуске в защищенном режиме (Protected Mode, PMIE), который является стандартным в Windows Vista и Windows Server 2008. PMIE использует уровни целостности, представленные в Vista и Server 2008, для ограничения записей реестра и местоположений на диске, которые может модифицировать код, запущенный в IE. Как я уже описывал в более ранней статье, изолированная программная среда определяется местоположением, имеющим значение Low Integrity, уровнем на котором запускается PMIE, и определяет, какие объекты может изменять PMIE, что позволяет сохранять избранные ссылки и временные файлы как кэш IE и историю браузера. Однако, PMIE не может изменять другие папки в пользовательском профиле, такие как папки документов, ветки реестра и папки диска с указанием автоматически загружаемых программ для каждого пользователя, так как они имеют уровень целостности Medium. Это препятствует распространению так называемого drive-by-download вредоносного ПО, которое может заразить процесс IE благодаря постоянному присутствию в системе.
Чтобы сохранить обратную совместимость с унаследованным кодом, таким как элементы управления ActiveX и Browser Helper Objects, которые могут быть написаны с необходимостью создания файлов вне изолированной среды, PMIE создает компенсационный слой, который перехватывает операции с реестром и диском и перенаправляет операции, требующие доступ за пределы изолированной среды в виртуализированную папку.
Чтобы удостоверится в том, что произошло именно это, я изучил представленный выше стек трассировки виртуализированных операций, нажав правой кнопкой на строчке и выбрав элемент Stack. Выяснилось что библиотека Acredir.dll перехватывала операции и запускала функцию переадресации:
Двойной щелчок на строке в трассировке стека открыл диалоговое окно свойств модуля, в котором было написано, что DLL является "Windows Compatibility DLL", таким образом, доказывая, что это часть реализации PMIE:
Я уже был знаком с виртуализацией PMIE, но никогда не видел виртуализированные файлы на компьютере, поэтому для меня не было очевидного ответа, что стало причиной такого несоответствия. Process Monitor показал причину, поэтому все, что мне оставалось сделать - удалить виртуализированные файлы. Большинство пользователей не знают, что могут перемещать и удалять файлы из диалогового окна выбора файлов, поэтому я использовал возможность показать своей жене, что она может управлять виртуализированными файлами из диалогового окна редактора почты при выборе файлов, если она вдруг столкнется с данной проблемой в будущем. Мы удалили файлы, которые ей были не нужны, и переместили нужные файлы в ее папки библиотек фотографий.
Дело было закрыто. Моя жена была поражена той легкости, с которой мне удалось обнаружить причину появления таинственных файлов. Однако, она еще больше удивилась, узнав, что именно я написал программу для решения этой проблемы. В связи с появлением проблемы моя жена, сама того не желая, изучила виртуализацию PMIE и уровни целостности.
Между прочим, скорее всего вы увидите файлы и папки, если загляните в виртуализированную папку PMIE в вашем профиле, так как даже самые рутинные операции в IE приводят к переадресации. Здесь вы можете увидеть файлы кэша эскизов, которые создает диалоговое окно оболочки для просмотра файлов в IE. Обычно оболочка хранит файлы кэша эскизов в вашем профиле, но PMIE не имеет туда доступа, поэтому все они виртуализируются.