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


Создание обработчиков перехватчика копирования

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

Инструкции

Шаг 1. Реализация обработчиков копирования

Как и все обработчики расширений оболочки, обработчики функции копирования являются объектами Компонентной Объектной Модели (COM), реализуемые как DLL. Они экспортируют один интерфейс в дополнение к IUnknown: ICopyHook. Оболочка инициализирует обработчик напрямую, поэтому нет необходимости в интерфейсе инициализации, например IShellExtInit.

Интерфейс ICopyHook имеет один метод ICopyHook::CopyCallback. Когда папка собирается быть перемещена, оболочка вызывает этот метод. Он передает различные сведения, в том числе:

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

Когда вызывается метод ICopyHook::CopyCallback обработчика, он возвращает одно из трех следующих значений, чтобы указать оболочке, как следует действовать.

Ценность Описание
IDYES Разрешает операцию.
IDNO Запрещает операцию в этой папке. Оболочка может продолжать любые другие утвержденные операции, такие как, например, операция пакетного копирования.
IDCANCEL Запрещает текущую операцию и отменяет все ожидающие операции.

 

Шаг 2: Регистрация обработчиков Copy Hook

Копировальные хуки-обработчики для папок регистрируются в подразделе HKEY_CLASSES_ROOT\Directory\shellex\CopyHookHandlers. Создайте подраздел CopyHookHandlers, названный в честь обработчика, и задайте значение по умолчанию подраздела как строковую форму идентификатора класса обработчика (CLSID) GUID.

В следующем примере добавляется подраздел MyCopyHandler в список hook-обработчиков копирования Shell.

HKEY_CLASSES_ROOT
   Directory
      shellex
         CopyHookHandlers
            MyCopyHandler
               (Default) = {MyCopyHandler CLSID GUID}

Обработчики копирования для объектов принтера регистрируются фактически таким же образом. Единственное различие заключается в том, что их необходимо зарегистрировать в подразделе "Принтеры HKEY_CLASSES_ROOT\".

Замечания

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

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

Создание Обработчиков Расширений Оболочки

ICopyHook