Come creare gestori di hook di copia

Le procedure generali per l'implementazione e la registrazione di un gestore di estensioni shell sono illustrate in Creazione di gestori estensioni shell. Questo documento è incentrato sugli aspetti dell'implementazione specifici per la copia dei gestori di hook.

Istruzioni

Passaggio 1: Implementazione di gestori di hook di copia

Come tutti i gestori delle estensioni shell, i gestori di hook di copia sono oggetti COM (Component Object Model) in-process implementati come DLL. Esportano un'interfaccia oltre a IUnknown: ICopyHook. Shell inizializza direttamente il gestore, pertanto non è necessario un'interfaccia di inizializzazione, ad esempio IShellExtInit.

L'interfaccia ICopyHook include un singolo metodo, ICopyHook::CopyCallback. Quando una cartella sta per essere spostata, shell chiama questo metodo. Passa una varietà di informazioni, tra cui:

  • Nome della cartella.
  • Destinazione o nuovo nome della cartella.
  • Operazione in corso di tentativo.
  • Attributi delle cartelle di origine e destinazione.
  • Handle di finestra che può essere usato per visualizzare un'interfaccia utente.

Quando viene chiamato il metodo ICopyHook::CopyCallback del gestore, restituisce uno dei tre valori seguenti per indicare alla Shell come procedere.

Valore Descrizione
IDYES Consente l'operazione.
IDNO Impedisce l'operazione in questa cartella. Shell può continuare con qualsiasi altra operazione approvata, ad esempio un'operazione di copia batch.
IDCANCEL Impedisce l'operazione corrente e annulla tutte le operazioni in sospeso.

 

Passaggio 2: Registrazione dei gestori di hook di copia

I gestori di hook di copia per le cartelle vengono registrati nella sottochiaveCopyHookHandlersHKEY_CLASSES_ROOT\Directory\shellex\. Creare una sottochiave di CopyHookHandlers denominata per il gestore e impostare il valore predefinito della sottochiave sulla forma stringa del GUID (CLSID) del gestore.

Nell'esempio seguente viene aggiunta la sottochiave MyCopyHandler all'elenco dei gestori di hook di copia di Shell.

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

I gestori di hook di copia per gli oggetti stampante vengono registrati essenzialmente nello stesso modo. L'unica differenza è che è necessario registrarli nella sottochiavestampantiHKEY_CLASSES_ROOT\.

Commenti

In genere, gli utenti e le applicazioni possono copiare, spostare, eliminare o rinominare le cartelle con poche restrizioni. Implementando un gestore di hook di copia, è possibile controllare se queste operazioni vengono eseguite. Ad esempio, l'implementazione di tale gestore consente di impedire che le cartelle critiche vengano rinominate o eliminate. I gestori di hook di copia possono essere implementati anche per gli oggetti stampante.

I gestori di hook di copia sono globali. Shell chiama tutti i gestori registrati ogni volta che un'applicazione o un utente tenta di copiare, spostare, eliminare o rinominare una cartella o un oggetto stampante. Il gestore non esegue l'operazione stessa. Approva o veta solo. Se tutti i gestori approvano, Shell esegue l'operazione. Se qualsiasi gestore ha veto l'operazione, viene annullata e i gestori rimanenti non vengono chiamati. I gestori di hook di copia non vengono informati dell'esito positivo o negativo dell'operazione, in modo che non possano essere usati per monitorare le operazioni dei file.

Creazione di gestori di estensione della shell

ICopyHook