Cómo crear controladores de enlace de copia

Los procedimientos generales para implementar y registrar un controlador de extensión de Shell se describen en Creación de controladores de extensión de Shell. Este documento se centra en los aspectos de la implementación específicos de los controladores de enlace de copia.

Instrucciones

Paso 1: Implementar controladores de enlace de copia

Al igual que todos los controladores de extensiones de Shell, los controladores de enlace de copia son objetos del Modelo de objetos componentes (COM) en proceso implementados como ARCHIVOS DLL. Exportan una interfaz además de IUnknown: ICopyHook. Shell inicializa el controlador directamente, por lo que no es necesario una interfaz de inicialización como IShellExtInit.

La interfaz ICopyHook tiene un único método, ICopyHook::CopyCallback. Cuando una carpeta está a punto de moverse, el Shell llama a este método. Pasa una variedad de información, entre las que se incluyen:

  • Nombre de la carpeta.
  • Destino o nombre nuevo de la carpeta.
  • Operación que se está intentando.
  • Atributos de las carpetas de origen y destino.
  • Identificador de ventana que se puede usar para mostrar una interfaz de usuario.

Cuando se llama al método ICopyHook::CopyCallback del controlador, devuelve uno de los tres valores siguientes para indicar al Shell cómo debe continuar.

Valor Descripción
IDYES Permite la operación.
IDNO Impide la operación en esta carpeta. El Shell puede continuar con cualquier otra operación que se haya aprobado, como una operación de copia por lotes.
IDCANCEL Impide la operación actual y cancela las operaciones pendientes.

 

Paso 2: Registrar controladores de enlace de copia

Los controladores de enlace de copia de las carpetas se registran en la subclaveCopyHookHandlersde HKEY_CLASSES_ROOT\Directory\shellex\. Cree una subclave de CopyHookHandlers denominada para el controlador y establezca el valor predeterminado de la subclave en el formato de cadena del GUID del identificador de clase del controlador (CLSID).

En el ejemplo siguiente se agrega la subclave MyCopyHandler a la lista de controladores de enlace de copia del shell.

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

Los controladores de enlace de copia para los objetos de impresora se registran básicamente de la misma manera. La única diferencia es que debe registrarlas en la subclave HKEY_CLASSES_ROOT\Impresoras .

Comentarios

Normalmente, los usuarios y las aplicaciones pueden copiar, mover, eliminar o cambiar el nombre de las carpetas con algunas restricciones. Al implementar un controlador de enlace de copia, puede controlar si estas operaciones tienen lugar. Por ejemplo, la implementación de este tipo de controlador permite evitar que se cambie el nombre o se eliminen las carpetas críticas. Los controladores de enlace de copia también se pueden implementar para objetos de impresora.

Los controladores de enlace de copia son globales. El Shell llama a todos los controladores registrados cada vez que una aplicación o usuario intenta copiar, mover, eliminar o cambiar el nombre de una carpeta o un objeto de impresora. El controlador no realiza la operación en sí. Sólo aprueba o lo veta. Si todos los controladores aprueban, shell realiza la operación. Si algún controlador veta la operación, se cancela y no se llama a los controladores restantes. Los controladores de enlace de copia no están informados del éxito o error de la operación, por lo que no se pueden usar para supervisar las operaciones de archivos.

Creación de controladores de extensiones de shell

ICopyHook