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

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

Инструкции

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

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

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

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

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

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

 

Шаг 2. Регистрация обработчиков перехватчиков копирования

Обработчики перехватчиков копирования для папок регистрируются в подразделе HKEY_CLASSES_ROOT\Directory\shellex\CopyHookHandlers . Создайте подраздел CopyHookHandlers с именем обработчика и задайте значение по умолчанию подраздела в строковой форме ИДЕНТИФИКАТОРа класса (CLSID) обработчика.

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

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

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

Комментарии

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

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

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

ICopyHook