Каталог dllcache и с чем его едят
Dec 5, 2006 · CommentsWindows
Тут в комментариях зашла речь о роли каталога “%SystemRoot%\system32\dllcache” и причинах почему он занимает столько места. Отвечаю здесь, так как это может быть интересно многим.
Для того чтобы убедиться, что каталог dllcache - это всего лишь никак не используемая свалка копий исполняемых модулей достаточно воспользоваться утилитой ProcessExplorer. В среднем это около пол гига украденных у пользователя. Даже, если это был бы действительно кеш, любому маломальски опытному человеку понятно, что скорость доступа к файлам в каталоге такой длинны будем еще хуже чем к их оригиналам.
Похоже, что разработчики выбрали не очень удачное имя для этого каталога. Назови они его “wfpcache” или “wfpshadow” или ещё как-нибудь и никто бы не подумал, что этот каталог используется для улучшения производительности, путем кеширования библиотек.
На самом деле, dllcache используется службой Windows File Protection (WFP). Главная и единственная её задача состоит в обеспечении целостности системных файлов. В двух словах WFP хранит копию каждого защищаемого файла в каталоге dllcache и использует эту копию для восстановления файла, если кто-либо пытается заменить или изменить защищаемый файл.
Подробно о WFP написано вот здесь: Windows File Protection guide. (Ссылка нашлась в блоге Robert Bogue). Это руководство отвечает на все вопросы, касающиеся WFP. Я лишь резюмирую что там написано:
-
В dllcache храняться копии большей части системных файлов. В результате dllcache может занимать довольно значительный объем;
-
dllcache может расти со временем - по мере появления новых системных файлов. Например после установки ежемесячных обновлений системы;
-
WFP конфигурируется через глобальные политики (global policy) или с помощью утилиты sfc.exe. Помимо прочего, можно задать максимальный размер каталога dllcache. (Не уверен, что это работает на Vista);
-
WFP можно отключить совсем, хотя это и не документировано и может привести к плачевным последствиям.
PS: Про назначение каталога “%SystemRoot%\Installer” напишу немного позднее.