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

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

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

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

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

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

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

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

Служебная программа очистки диска Windows

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Initialize/InitializeEx

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

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

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

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

  • EVCF_SETTINGSMODE

    Если диспетчер очистки диска запускается по расписанию, он устанавливает флаг 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_REMOVEFROMLIST

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

GetSpaceUsed

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

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

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

ShowProperties

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

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

Purge

Диспетчер очистки диска вызывает метод Purge обработчика, чтобы настроить очистку в движении. Параметр picb метода является указателем на интерфейс IEmptyVolumeCacheCallBack диспетчера очистки диска. Как и в случае с методом GetSpaceUsed , обработчик должен периодически использовать интерфейс обратного вызова, чтобы сообщать о ходе выполнения и запрашивать диспетчер очистки диска, если пользователь нажал кнопку Отмена. Однако обратите внимание, что метод Purge должен вызывать IEmptyVolumeCacheCallBack::P urgeProgress, а не 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.
AdvancedButtonText 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\username\My Music
  • Значение Папки содержит "Jazz\Singers"
В результате этого сценария обработчик очистки диска выполняет поиск в папке C:\Documents and Settings\username\My Music\Jazz\Singers. Обратите внимание, что косая черта, предшествующая значению папки, добавляется, если она отсутствует.
Описание REG_SZ Описательный текст, отображаемый под списком диспетчера очистки диска при выборе имени обработчика. Здесь можно объяснить, что делает обработчик, какие файлы он касается, а также другие сведения, объясняя пользователю. Если обработчик не предоставляет IEmptyVolumeCache2::InitializeEx , этот текст можно переопределить с помощью метода IEmptyVolumeCache::Initialize обработчика, указав альтернативную строку в параметре ppwszDescription при вызове метода .
Отображение REG_SZ Имя обработчика, отображаемое в списке диспетчера очистки диска. Если обработчик не предоставляет IEmptyVolumeCache2::InitializeEx , этот текст можно переопределить с помощью метода IEmptyVolumeCache::Initialize обработчика, указав альтернативную строку в параметре ppwszDisplayName при вызове метода .
FileList 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 Путь к ресурсу, из которого необходимо получить значок для использования в связи с обработчиком.
LastAccess REG_DWORD или REG_BINARY Количество дней, которое должно пройти с момента последнего доступа к файлу или создания каталога для этого файла или каталога, которые будут рассматриваться для очистки.
Приоритет REG_DWORD или REG_BINARY Определяет порядок выполнения обработчика по отношению к другим обработчикам. Чем больше число, тем раньше в процессе выполнения обработчика. Существует нет определенного диапазона, любое число является допустимым.
PropertyBag REG_SZ CLSID ресурса, используемого для предоставления локализованного текста отображаемого имени, описания и текста кнопки. Этот ресурс полезен в ситуации, когда обработчик не реализует IEmptyVolumeCache, а обработчик запускается в Microsoft Windows NT или Windows XP.
Диспетчер очистки диска сначала проверяет, вернула ли подпрограмма инициализации обработчика эти строки, как это было бы при реализации IEmptyVolumeCache2 . В противном случае руководитель переходит к контейнеру свойств с именем в этом значении. Если он не указан, он извлекает текст из реестра.
StateFlags 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, поэтому значения Display и Description предоставляются через реестр. При объявлении этих строк имейте в виду, что это может привести к проблемам локализации. Локализованный текст можно предоставить с помощью значения PropertyBag. Значение AdvancedButtonText игнорируется, так как для этого обработчика отсутствует пользовательский интерфейс и, следовательно, нет кнопки для его отображения.

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

Ниже показан пример регистрации для обработчика очистки диска, реализованного компанией The Phone Company. Этот обработчик реализует как IEmptyVolumeCache , так и IEmptyVolumeCache2, поэтому предоставляет значения AdvancedButtonText, Description и Display, если они используются на компьютере под управлением Windows 98. Обработчик объединяет значения CSIDL и Folder для поиска файлов в каталоге 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}