Поделиться через


Создание обработчика очистки диска

Одна аксиома, которая подтверждается снова и снова в мире компьютеров, заключается в том, что независимо от размера емкости хранилища, вы в конечном итоге заполните его. Хотя средний размер жесткого диска компьютера значительно увеличился с течением времени, приложения также выросли соответствующим образом, что позволяет пользователям искать способы создания свободного места на жестком диске. Доступное пространство также уменьшается на количество временных файлов, создаваемых приложениями по соображениям резервного копирования или производительности. Когда дисковое пространство становится низким, необходимо уменьшить объем пространства, используемого приложениями. Дисковое пространство можно освободить с помощью различных средств, включая следующие:

  • Удаление файлов.
  • Сжатие файлов.
  • Перемещение файлов в носитель резервной копии.
  • Передача файлов на удаленный сервер.

К файлам, которые являются хорошими кандидатами на очистку, относятся:

  • Файлы, которые пользователю никогда больше не понадобятся.
  • Временные файлы, которые существуют только по соображениям производительности.
  • Файлы, которые можно восстановить при необходимости из компакт-диска установки.
  • Файлы данных, которые, возможно, были заменены более новыми версиями, такими как старые файлы резервного копирования.
  • Старые файлы, которые не использовались в течение длительного времени.

Удаление особенно подходит для файлов, которые пользователь никогда не будет снова нуждаться, например файлы, которые временно кэшируются по соображениям производительности. Удаление также подходит для файлов, которые легко восстанавливаются, например графические файлы, которые можно перезагрузить из установочного компакт-диска. Файлы, которые может потребоваться пользователю позже или что было бы трудно восстановить, являются лучшими кандидатами для сжатия или резервного копирования.

Ожидая, что пользователь вручную очищает файловую систему, не является хорошим решением. Пользователь может не знать, где находятся многие файлы или как распознать, какие из них можно безопасно удалить. Кроме того, существует риск удаления необходимых файлов пользователем.

В этом разделе рассматриваются следующие аспекты служебной программы очистки диска.

Программа очистки диска Windows

Начиная с Windows 98 операционная система Windows включает очистку диска, служебную программу, которая упрощает управление доступным жестким диском. Служебная программа очистки диска предназначена для освобождения максимально возможного объема места на диске и снижения риска случайного удаления пользователем важных файлов.

Очистка диска может быть инициирована тремя способами.

  • Пользователь может инициировать очистку диска, щелкнув Пуск; выбирая Все программы, Стандартныеи Служебные; и наконец, нажмите Очистка диска.
  • Система уведомляет пользователя о том, что неиспользуемое дисковое пространство достигло критического режима. Пороговое значение критического режима для диска размером более 2,25 гигабайта (ГБ) составляет 200 мегабайт (МБ). Последующие предупреждения выдаются на 80, 50 и 1 МБ. Пользователь получает возможность освободить место на диске вручную или запустить служебную программу очистки диска.
  • Пользователь может иметь мастер запланированных задач Windows (известный как мастер обслуживания в старых системах) автоматически запускать программу очистки диска в запланированное время.

Основная проблема, связанная с очисткой диска, заключается в том, чтобы освободить максимально возможное место на диске без удаления основных файлов. Так как нет стандартного способа пометить файлы для очистки, ни одно приложение не может надежно обнаруживать и очищать все неустанные файлы. Программа очистки диска устраняет эту проблему, разделив операцию очистки между одним диспетчером очистки диска и коллекцией обработчиков очистки диска .

При запуске служебной программы очистки диска пользователь увидит следующее диалоговое окно. (Если на компьютере существует несколько дисков или секций дисков, пользователю сначала будет предложено выбрать диск перед отображением этого диалогового окна.)

снимок экрана диалогового окна очистки

Диспетчер очистки диска является частью операционной системы. Откроется диалоговое окно, показанное на предыдущем рисунке, обрабатывает входные данные пользователя и управляет операцией очистки. Фактический выбор и очистка ненужных файлов выполняется отдельными обработчиками очистки диска, отображаемыми в списке диспетчера очистки диска. Пользователь может включить или отключить отдельные обработчики, выбрав или сняв флажок в интерфейсе менеджера очистки диска.

Каждый обработчик отвечает за хорошо определенный набор файлов. Например, выбранный обработчик на рисунке отвечает за очистку скачанных файлов программы. Обработчик, выбранный на рисунке, также предоставляет кнопку Просмотр файлов. Щелкнув кнопку, пользователь может запросить, чтобы обработчик отображал пользовательский интерфейс, как правило, окно проводника Windows, позволяющее пользователю указать файлы или классы файлов для очистки.

Хотя Windows поставляется с рядом обработчиков очистки диска, они не предназначены для обработки файлов, созданных другими приложениями. Диспетчер очистки диска спроектирован как гибкий и расширяемый инструмент, позволяющий любому разработчику реализовать и зарегистрировать собственный обработчик очистки диска. Любой разработчик может расширить доступные службы очистки дисков, реализуя и регистрируя обработчик очистки диска.

Все приложения, которые создают временные файлы, могут и должны реализовывать и регистрировать обработчик очистки диска. Это дает пользователям удобный и надежный способ управления временными файлами приложения. При реализации обработчика можно решить, какие файлы затронуты, и определить, как происходит фактическая очистка.

Основы реализации

Обработчики очистки — это объекты объектной модели (COM) серверов, работающих в процессе. Windows предоставляет существующий объект обработчика, называемый DataDrivenCleaner для вашего использования. Вы также можете реализовать обработчик самостоятельно для большей гибкости. Затем эти объекты позволяют указать, как выбрать файлы, свободное место на диске и, в случае реализованного обработчика, отобразить необязательный пользовательский интерфейс для более детального управления. В этом разделе рассматривается вопрос реализации собственного обработчика. Дополнительные сведения об использовании объекта DataDrivenCleaner см. в разделе Using the DataDrivenCleaner Object.

Обработчик очистки диска должен выполнять эти пять основных задач.

  • Инициализируйте объект обработчика.
  • Проверьте диск, чтобы определить, сколько дискового пространства можно освободить.
  • Отображение пользовательского интерфейса для получения отзывов пользователей о том, какие файлы необходимо очистить. (Необязательно)
  • Выполните очистку.
  • Отключение.

Чтобы диспетчер очистки диска управлял этими задачами, обработчик должен экспортировать IEmptyVolumeCache для Windows 98 или IEmptyVolumeCache2 для Windows Millennium Edition (Windows Me), Windows 2000 и Windows XP. Поскольку IEmptyVolumeCache2 наследует от IEmptyVolumeCache, добавляя только дополнительный метод InitializeEx, требуется относительно небольшое количество дополнительной работы для их реализации. Если обработчик не предназначен только для одной из этих операционных систем, он должен экспортировать оба интерфейса.

Чтобы экспортировать эти интерфейсы, необходимо реализовать эти методы, соответствующие пяти основным задачам.

Инициализация/ИнициализацияEx

Два метода инициализации, которые довольно похожи, вызываются при запуске служебной программы очистки диска. Диспетчер очистки диска Windows 98 вызывает метод IEmptyVolumeCache::Initialize. Windows Millennium Edition (Windows Me), Windows 2000 или диспетчер очистки дисков Windows XP, однако сначала пытается вызвать IEmptyVolumeCache2::InitializeEx и использует только IEmptyVolumeCache::Initialize, если IEmptyVolumeCache2 не предоставляется обработчиком. Диспетчер очистки диска передает информацию методу, включая ключ реестра обработчика и том диска, который необходимо очистить.

Любой метод может возвращать различные строки отображения и задавать один или несколько флагов. Основное различие между двумя методами заключается в том, как обрабатывается текст, отображаемый в диспетчере очистки диска. Затронуты следующие три строки.

Струна Цель Инициализировать InitializeEx
Отображаемое имя Имя обработчика, отображаемое в списке диспетчера очистки диска. Если ppwszDisplayNameNULL, то значение по умолчанию извлекается из реестра. Правильно локализованная строка должна быть указана в ppwszDisplayName никакие значения реестра не используются.
Описание Описательный текст отображается под полем списка, когда выбрано имя обработчика. Если ppwszDescription равен NULL, значение по умолчанию будет извлекаться из реестра. Правильно локализованная строка должна быть указана в ppwszDescription не используются значения реестра.
Текст кнопки Текст необязательной кнопки, которая позволяет пользователям отображать пользовательский интерфейс обработчика. Нет доступных параметров. Необходимо указать в реестре. Правильно локализованная строка должна быть указана в ppwszBtnText не используются значения реестра.

Параметр pdwFlags, найденный в обоих методах инициализации, распознает один набор флагов. Два из этих флагов передаются в метод диспетчером очистки диска.

  • РЕЖИМ_НАСТРОЕК_EVCF

    Если диспетчер очистки диска запускается по расписанию, он устанавливает флаг EVCF_SETTINGSMODE. Если этот флаг установлен, диспетчер очистки диска не вызывает методы GetSpaceUsed, Purgeили ShowProperties. Метод Initialize или InitializeEx должен обрабатывать все задачи, обычно выполняемые GetSpaceUsed и Purge. Так как нет возможности для отзывов пользователей, следует коснуться только тех файлов, которые очень безопасны для очистки. Следует игнорировать параметр pcwszVolume метода инициализации и очистить ненужные файлы независимо от того, на каком диске они находятся.

  • EVCF_OUTOFDISKSPACE

    Если установлен флаг EVCF_OUTOFDISKSPACE, на диске пользователя критически мало места. Обработчик должен быть агрессивным при удалении файлов, даже если это приведет к потере производительности. Однако обработчик, очевидно, не должен удалять файлы, которые привели бы к сбою приложения или пользователю потерять данные.

Остальные флаги задаются обработчиком очистки диска и возвращаются в диспетчер очистки диска. Дополнительные сведения см. на страницах ссылок на метод для IEmptyVolumeCache::Initialize и IEmptyVolumeCache2::InitializeEx.

  • EVCF_DONTSHOWIFZERO

    Отображайте обработчик в списке менеджера очистки диска только в том случае, если значение, возвращаемое GetSpaceUsed, указывает, что обработчик может освободить место на диске.

  • EVCF_ENABLEBYDEFAULT

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

  • EVCF_ENABLEBYDEFAULT_AUTO

    Указывает, что обработчик автоматически запускается во время запланированных очисток.

  • EVCF_HASSETTINGS

    Установите этот флаг, если у обработчика есть пользовательский интерфейс для отображения. В ответ диспетчер очистки диска отображает кнопку при выборе этого обработчика в списке. Если эта кнопка нажимается, диспетчер очистки диска вызывает ShowProperties.

  • EVCF_УДАЛИТЬ_ИЗ_СПИСКА

    Удалите имя обработчика из списка доступных обработчиков после запуска обработчика один раз. Сведения реестра обработчика также удаляются.

GetSpaceUsed

Диспетчер очистки диска вызывает этот метод, чтобы определить, сколько места может освободить обработчик очистки диска. Затем диспетчер очистки диска отображает это значение справа от имени обработчика в списке. Эта операция выполняется для всех обработчиков, зарегистрированных в диспетчере очистки диска при запуске диспетчера, и перед отображением основного пользовательского интерфейса руководителя. При вызове GetSpaceUsed обработчик должен проверять файлы, за которые он отвечает, определять, какие из них являются кандидатами на очистку, и возвращать объем места на диске, который можно освободить.

Поскольку сканирование может быть длительным процессом, менеджер очистки диска использует параметр picb метода для передачи указателя на интерфейс IEmptyVolumeCacheCallBack. Обработчик периодически использует интерфейс во время сканирования для вызова IEmptyVolumeCacheCallBack::ScanProgress, который выполняет две задачи.

  • Позволяет диспетчеру очистки диска обновлять индикатор выполнения, информируя пользователя о ходе сканирования.
  • Уведомляет обработчик об остановке проверки в случае нажатия кнопки "Отмена" окна прогресса. Это событие кнопки не передается непосредственно обработчику; Вместо этого диспетчер очистки диска возвращает E_ABORT при следующем вызовы GetSpaceUsed вызовы IEmptyVolumeCacheCallBack::ScanProgress.

Показать свойства

Перед началом очистки обработчик может отображать пользовательский интерфейс обычно в виде окна проводника Windows, который позволяет пользователю просматривать список файлов или классов файлов, выбранных для очистки обработчиком. Если обработчик устанавливает флаг EVCF_HASSETTINGS при вызове функций Initialize или InitializeEx, пользователь может запросить пользовательский интерфейс, нажав кнопку, предназначенную для этой цели в диспетчере очистки диска. Текст кнопки зависит от обработчика, но "Просмотр файлов", "Просмотр страниц" и "Параметры" являются часто используемыми метками.

При нажатии кнопки диспетчер очистки диска вызывает ShowProperties, чтобы запросить обработчику отобразить пользовательский интерфейс. Пользовательский интерфейс должен быть создан как дочерний элемент окна, дескриптор которого передается в параметр hwnd метода ShowProperties.

Чистка

Диспетчер очистки диска вызывает метод Purge обработчика, чтобы запустить очистку. Параметр метода — это указатель на интерфейс IEmptyVolumeCacheCallBack диспетчера очистки диска. Как и в случае с методом GetSpaceUsed, обработчик должен периодически использовать интерфейс обратного вызова, чтобы сообщить о ходе выполнения и запрашивать у диспетчера очистки диска, нажал ли пользователь Отмена. Однако обратите внимание, что метод Purge должен вызывать IEmptyVolumeCacheCallBack::PurgeProgress, а не ScanProgress.

Деактивировать

Метод деактивациивызывается при подготовке диспетчера очистки диска к завершении работы. Обработчик должен выполнять все необходимые задачи очистки и возвращать их. Если вы не хотите, чтобы обработчик выполнялся снова, задайте флаг EVCF_REMOVEFROMLIST в параметре pdwFlags метода инициализации. Если этот флаг задан, диспетчер очистки диска удаляет обработчик из списка и удаляет записи реестра обработчика. Чтобы снова запустить обработчик, необходимо повторно добавить записи реестра. Этот флаг обычно используется для обработчиков, которые выполняются только один раз.

Регистрация обработчика очистки диска

Чтобы добавить обработчик в список диспетчера очистки диска, в реестр Windows необходимо добавить определенные ключи и значения.

Регистрация CLSID для обработчика

Как и во всех COM-объектах, GUID и DLL обработчика объекта должны быть зарегистрированы в ключе CLSID в HKEY_CLASSES_ROOT. Вы также можете зарегистрировать значок, отображаемый рядом с именем обработчика в списке диспетчера очистки диска, но это необязательно. В следующем примере показаны ключи, значения и данные.

HKEY_CLASSES_ROOT
   CLSID
      Handler's GUID
         DefaultIcon
            (Default) = Handler's Icon Path, Icon Index
         InprocServer32
            (Default) = Handler's DLL path
            ThreadingModel = Apartment

Регистрация обработчика в диспетчере очистки диска: общие сведения

Чтобы завершить регистрацию, обработчик должен добавить ключ, содержащий его особенности, как показано здесь. Оставшаяся часть этого раздела описывает содержимое этого ключа.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     Handler's Key

Как правило, имя ключа, содержащего данные обработчика, названо в честь типа файла, с которым он работает, например загруженные программные файлы, но это не обязательно. В следующей таблице приведены возможные значения, найденные в этом ключе.

Заметка

Требуется только значение по умолчанию, указывающее идентификатор класса обработчика (CLSID).

Ценность Тип Значение
По умолчанию REG_SZ CLSID обработчика, зарегистрированный в HKEY_CLASSES_ROOT\CLSID.
ТекстКнопкиРасширенный REG_SZ Текст необязательной кнопки, которую пользователи могут щелкнуть, чтобы отобразить пользовательский интерфейс обработчика. Знак & может быть размещён перед символом, чтобы назначить клавишу быстрого доступа для кнопки. Значение AdvancedButtonText игнорируется обработчиками, задействующими IEmptyVolumeCache2::InitializeEx.
CleanupString REG_SZ Командная строка, указывающая исполняемый файл и необязательные параметры командной строки. Эта командная строка выполняется при завершении очистки диска.
CSIDL REG_DWORD Идентификатор, независимый от системы, для специальной папки, включаемой в поиск файлов. Это значение должно быть введено в виде числового значения, например, 0x0000001c, а не CSIDL_LOCAL_APPDATA. Список возможных значений см. в разделе CSIDL. Можно использовать только одно значение.
Если задано значение папки, расположение, указанное значением CSIDL, добавляется к этой информации для создания пути поиска. Например, рассмотрим следующий сценарий.
  • Значение CSIDL указывается как 0x0000000d (CSIDL_MYMUSIC)
  • Папка "Моя музыка" находится в папке C:\Documents and Settings\имя пользователя\My Music
  • Значение папки содержит "Jazz\Singers"
В результате этого сценария обработчик очистки диска выполняет поиск в папке C:\Documents and Settings\имя пользователя\My Music\Jazz\Singers. Обратите внимание, что косая черта, предшествующая значению поля 'Папка', добавляется, если она отсутствует.
Описание REG_SZ Описательный текст отображается под списком диспетчера очистки диска, когда выбрано имя обработчика. Здесь вы можете объяснить, что делает обработчик, какими файлами он занимается, и любую другую информацию, полезную для пользователя. Если IEmptyVolumeCache2::InitializeEx не открывается обработчиком, этот текст можно переопределить через метод IEmptyVolumeCache::Initialize, указав альтернативную строку в параметре ppwszDescription при вызове метода.
Дисплей REG_SZ Имя обработчика, отображаемое в списке диспетчера очистки диска. Если IEmptyVolumeCache2::InitializeEx не предоставляется обработчиком, этот текст можно переопределить с помощью метода IEmptyVolumeCache::Initialize, указав альтернативную строку в параметре ppwszDisplayName при вызове метода.
СписокФайлов REG_SZ или REG_MULTI_SZ Список файлов, которые были найдены и очищены этим обработчиком. Можно указать подстановочные знаки с помощью ? или * символы. Если значение имеет тип REG_SZ, несколько расширений разделяются символами | или : без пробелов по краям.
Если флаг DDEVCF_REMOVEDIRS задан в значении Flags, эти значения могут указывать имена каталогов, а также файлы.
Флаги REG_DWORD или REG_BINARY Флаги, управляющие элементами процедуры поиска и очистки. Одно или несколько следующих значений.
  • DDEVCF_DOSUBDIRS (0x00000001). Поиск и удаление рекурсивно.
  • DDEVCF_REMOVEAFTERCLEAN (0x00000002). После запуска обработчика удалите его из реестра.
  • DDEVCF_REMOVEREADONLY (0x00000004). Удалите файлы, соответствующие условиям поиска, даже если они доступны только для чтения.
  • DDEVCF_REMOVESYSTEM (0x00000008). Удалите файлы, соответствующие критериям поиска, даже если они являются системными файлами.
  • DDEVCF_REMOVEHIDDEN (0x00000010). Удалите файлы, соответствующие критериям поиска, даже если они скрыты.
  • DDEVCF_DONTSHOWIFZERO (0x00000020). Не отображайте этот обработчик в диспетчере очистки диска, если файлы не соответствуют условиям поиска.
  • DDEVCF_REMOVEDIRS (0x00000040). Сопоставляйте значение FileList с каталогами и удалите совпадения и все их подкаталоги.
  • DDEVCF_RUNIFOUTOFDISKSPACE (0x00000080). Запустите этот обработчик, только если доступное место на диске упало ниже критического значения, определяемое диспетчером очистки диска, задав флаг EVCF_OUTOFDISKSPACE через IEmptyVolumeCache::Initialize или IEmptyVolumeCache2::InitializeEx.
  • DDEVCF_REMOVEPARENTDIR (0x00000100). Удалите родительский каталог указанных файлов после запуска очистки.
  • DDEVCF_PRIVATE_LASTACCESS (0x10000000). Используйте значение LastAccess, если указано, при определении того, какие файлы следует очистить. Этот флаг игнорируется при использовании DataDrivenCleaner любое указанное значение LastAccess всегда используется.
Папка REG_SZ, REG_MULTI_SZ или REG_EXPAND_SZ Определенная папка или папки для поиска элементов, соответствующих записям в значении FileList. Подстановочные знаки можно указать с помощью символа ?. или * символы. Если значение имеет тип REG_SZ, несколько имен папок разделяются с помощью | символ, без пробелов на обеих сторонах.
Если значение CSIDL присутствует, в этом значении можно указать только одну папку. Расположение, указанное значением CSIDL, добавляется в этот путь к папке для создания пути поиска. Пример см. в описании значения CSIDL.
Если это значение отсутствует в Windows Vista с пакетом обновления 1 (SP1) и более поздних версий, обработчик очистки игнорируется и возвращает S_FALSE при инициализации.
Если это значение отсутствует в исходном выпуске Windows Vista и более ранних версий, используется корневая папка текущего тома. Флаг DDEVCF_DOSUBDIRS необходим в этом случае для поиска всего диска. Без нее выполняется поиск только корневой папки.
Необходимо указать диск или диски. Это можно предоставить с помощью значения CSIDL или строки REG_EXPAND_SZ. Однако если нет этих параметров, необходимо указать диск для поиска в названии папки. Используйте ?: для поиска папки на текущем диске.
IconPath REG_SZ или REG_EXPAND_SZ Путь к ресурсу, из которого требуется получить значок для использования с обработчиком.
Последний доступ REG_DWORD или REG_BINARY Количество дней, которые должны пройти с момента последнего доступа к файлу или создания каталога, чтобы файл или каталог могли быть рассмотрены для очистки.
Приоритет REG_DWORD или REG_BINARY Определяет порядок выполнения обработчика относительно других обработчиков. Чем выше число, тем раньше в процессе запускается обработчик. Определенный диапазон отсутствует, любое число приемлемо.
PropertyBag REG_SZ CLSID ресурса, используемого для предоставления локализованного текста для отображаемого имени, описания и текста кнопки. Этот ресурс полезен в ситуации, когда обработчик не реализует IEmptyVolumeCache и обработчик выполняется в Microsoft Windows NT или Windows XP.
Диспетчер очистки диска сначала проверяет, возвратила ли подпрограмма инициализации обработчика эти строки, как в случае реализации IEmptyVolumeCache2. Если это не удается, менеджер далее обращается к контейнеру свойств, указанному в этом значении. Если ни один из них не указан, он извлекает текст из реестра.
Государственные флаги REG_DWORD Запустив исполняемый файл диспетчера очистки диска Cleanmgr.exe из командной строки, можно определить профили очистки. Эти профили представляют собой сочетание подмножеств доступных обработчиков и получают уникальную числовую метку. Это позволяет автоматизировать выполнение различных наборов обработчиков в разное время.
Командная строка "cleanmgr.exe /sageset:nnnn", где nnnn является уникальной числовой меткой, отображает пользовательский интерфейс, позволяющий выбрать обработчики для включения в этот профиль. Кроме определения профиля, параметр sageset также записывает значение с именем StateFlagsnnnn, где nnnn — это метка, используемая в параметре, ко всем вложенным ключам в VolumeCaches. Существует два возможных значения данных для этих записей.
  • 0. Не запускайте этот обработчик при запуске этого профиля.
  • 2. Включите этот обработчик при запуске этого профиля.

Например, предположим, что командная строка "cleanmgr.exe /sageset:1234" выполняется. В представленном пользовательском интерфейсе пользователь выбирает загруженные программные файлы, но не выбирает временные файлы Интернета. Затем в реестр записываются следующие значения.
HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     Downloaded Program Files
                        StateFlags1234 = 0x00000002
                     Internet Cache Files
                        StateFlags1234 = 0x00000000

Командная строка "cleanmgr.exe /sagerun:nnnn", где значение nnnn соответствует метке, объявленной параметром sageset, выполняет все обработчики, выбранные в этом профиле.
Универсальное значение StateFlags записывается в реестр при обычном выполнении очистки диска. Это значение просто сохраняет состояние (отмечено или не отмечено) обработчика в последний раз, когда он был предложен пользователю в качестве варианта. Существует два возможных значения данных для этих записей.
  • 0. Обработчик не был выбран.
  • 1. Был выбран обработчик.

Регистрация обработчика в диспетчере очистки диска: Windows 2000 или более поздние системы

Указание отображаемого текста в реестре может затруднить локализацию программного обеспечения. По этой причине Windows 2000 и Windows XP поддерживают интерфейс IEmptyVolumeCache2, используя предпочтительный метод инициализации InitializeEx. В Windows 2000 или более поздней версии всегда выполняется попытка вызова IEmptyVolumeCache2::InitializeEx перед IEmptyVolumeCache::Initialize. Система использует только Initialize для инициализации обработчика, если IEmptyVolumeCache2 отсутствует.

Разница в работе с реестром в Windows 2000 или более поздней версии заключается лишь в том, что можно исключить значения AdvancedButtonText, Display и Description, если обработчик предоставляет IEmptyVolumeCache2::InitializeEx. Эти значения, содержащие правильно локализованный текст, предоставляются диспетчеру очистки диска при вызове InitializeEx.

Использование объекта DataDrivenCleaner

Базовый обработчик очистки диска, называемый DataDrivenCleaner, предоставляется операционной системой. Чтобы использовать этот объект в качестве обработчика, а не реализовать собственный, используйте значение CLSID {C0E13E61-0CC6-11d1-BBB6-0060978B2AE6} в качестве значения по умолчанию для подключа обработчика в подразделе VolumeCaches, как описано в Регистрация обработчика с помощью диспетчера очистки диска: Общие сведения.

DataDrivenCleaner не предоставляет IEmptyVolumeCache2, поэтому параметры отображения и описания предоставляются через реестр. При объявлении этих строк следует учитывать, что это может привести к проблемам локализации. Локализованный текст можно указать с помощью значения PropertyBag. Значение AdvancedButtonText игнорируется, поскольку нет пользовательского интерфейса и, следовательно, нет кнопки, чтобы его отобразить, для этого обработчика.

Пример регистрации обработчика очистки диска

Ниже показан пример регистрации для обработчика очистки диска, реализованного компанией Phone Company. Этот обработчик реализует как IEmptyVolumeCache, так и IEmptyVolumeCache2, а также предоставляет значения AdvancedButtonText, Description и Display, если они используются на компьютере под управлением Windows 98. Обработчик объединяет значения CSIDL и папки для поиска файлов в каталоге C:\Program Files\The Phone Company\Temp, а флаг DDEVCF_DOSUBDIRS установлен для поиска в его подкаталогах. Для очистки считаются только те файлы с расширениями .tmp и TPC, а флаг DDEVCF_PRIVATE_LASTACCESS установлен таким образом, чтобы из этих файлов рассматривались только те файлы, к которым не было доступа в течение 14 дней или более. Флаг DDEVCF_DONTSHOWIFZERO также установлен, чтобы обработчик не отображался в списке, если он не нашел элементы для очистки.

HKEY_LOCAL_MACHINE
   Software
      Microsoft
         Windows
            CurrentVersion
               Explorer
                  VolumeCaches
                     The Phone Company Files
                        (Default) = {the CLSID GUID}
                        AdvancedButtonText = &View Files
                        CleanupString = c:\tpc.exe
                        CSIDL = 0x00000026
                        Description = Old temporary files.
                        Display = The Phone Company Files
                        FileList = *.tmp|*.tpc
                        Flags = 0x10000021
                        Folder = \The Phone Company\Temp
                        IconPath = c:\Program Files\The Phone Company\tpc.dll,2
                        LastAccess = 0x0000000e
                        Priority = 200
                        PropertyBag = {Property Bag CLSID GUID}