Guide pratique pour créer des gestionnaires de crochet de copie

Les procédures générales d’implémentation et d’inscription d’un gestionnaire d’extensions Shell sont décrites dans Création de gestionnaires d’extensions Shell. Ce document se concentre sur les aspects de l’implémentation qui sont spécifiques aux gestionnaires de hook de copie.

Instructions

Étape 1 : Implémentation des gestionnaires de raccordement de copie

Comme tous les gestionnaires d’extension Shell, les gestionnaires de raccordement de copie sont des objets COM (Component Object Model) in-process implémentés en tant que DLL. Ils exportent une interface en plus de IUnknown : ICopyHook. L’interpréteur de commandes initialise directement le gestionnaire. Il n’est donc pas nécessaire d’utiliser une interface d’initialisation telle que IShellExtInit.

L’interface ICopyHook a une seule méthode, ICopyHook::CopyCallback. Lorsqu’un dossier est sur le point d’être déplacé, l’interpréteur de commandes appelle cette méthode. Il transmet une variété d’informations, notamment :

  • Nom du dossier.
  • La destination ou le nouveau nom du dossier.
  • Opération tentée.
  • Attributs des dossiers source et de destination.
  • Handle de fenêtre qui peut être utilisé pour afficher une interface utilisateur.

Lorsque la méthode ICopyHook::CopyCallback de votre gestionnaire est appelée, elle retourne l’une des trois valeurs suivantes pour indiquer à l’interpréteur de commandes comment procéder.

Valeur Description
IDYES Autorise l’opération.
IDNO Empêche l’opération sur ce dossier. L’interpréteur de commandes peut continuer avec toutes les autres opérations qui ont été approuvées, telles qu’une opération de copie par lots.
IDCANCEL Empêche l’opération en cours et annule toutes les opérations en attente.

 

Étape 2 : Inscription des gestionnaires de crochet de copie

Les gestionnaires de hook de copie pour les dossiers sont inscrits sous la sous-clé HKEY_CLASSES_ROOT\Directory\shellex\CopyHookHandlers . Créez une sous-clé de CopyHookHandlers nommée pour le gestionnaire et définissez la valeur par défaut de la sous-clé sur la forme de chaîne du GUID d’identificateur de classe (CLSID) du gestionnaire.

L’exemple suivant ajoute la sous-clé MyCopyHandler à la liste des gestionnaires de hook de copie de l’interpréteur de commandes.

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

Les gestionnaires de raccordement de copie pour les objets imprimante sont inscrits essentiellement de la même façon. La seule différence est que vous devez les inscrire sous la sous-clé imprimantes HKEY_CLASSES_ROOT\.

Notes

Normalement, les utilisateurs et les applications peuvent copier, déplacer, supprimer ou renommer des dossiers avec quelques restrictions. En implémentant un gestionnaire de hook de copie, vous pouvez contrôler si ces opérations ont lieu. Par instance, l’implémentation d’un tel gestionnaire vous permet d’empêcher le renommage ou la suppression de dossiers critiques. Les gestionnaires de raccordement de copie peuvent également être implémentés pour les objets d’imprimante.

Les gestionnaires de raccordement de copie sont globaux. L’interpréteur de commandes appelle tous les gestionnaires inscrits chaque fois qu’une application ou un utilisateur tente de copier, déplacer, supprimer ou renommer un dossier ou un objet imprimante. Le gestionnaire n’effectue pas l’opération elle-même. Il ne fait que l’approuver ou y opposer son veto. Si tous les gestionnaires approuvent, l’interpréteur de commandes effectue l’opération. Si un gestionnaire met son veto à l’opération, celle-ci est annulée et les gestionnaires restants ne sont pas appelés. Les gestionnaires de raccordement de copie ne sont pas informés de la réussite ou de l’échec de l’opération, ils ne peuvent donc pas être utilisés pour surveiller les opérations de fichiers.

Création de gestionnaires d’extensions d’environnement

ICopyHook