Come creare gestori hook di copia
Le procedure generali per l'implementazione e la registrazione di un gestore di estensioni shell sono descritte in Creazione di gestori dell'estensione shell. Questo documento è incentrato sugli aspetti dell'implementazione specifici dei gestori dei hook di copia.
- Implementazione dei gestori di hook di copia
- Registrazione dei gestori dei ganci di copia
- argomenti correlati
Disposizioni
Passaggio 1: Implementazione di gestori di collegamenti di copia
Come tutti i gestori di estensioni Shell, i gestori 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'interfacciaICopyHookdispone di un singolo metodo, ICopyHook::CopyCallback. Quando una cartella sta per essere spostata, shell chiama questo metodo. Viene fornita una varietà di informazioni, tra cui:
- Nome della cartella.
- Destinazione o nuovo nome della cartella.
- L'operazione che si sta tentando di eseguire.
- Attributi delle cartelle di origine e di destinazione.
- Una maniglia finestra che può essere utilizzata per visualizzare un'interfaccia utente.
Quando viene chiamato 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 le operazioni in sospeso. |
Passaggio 2: Registrazione dei gestori di aggancio per la copia
I gestori dei hook di copia per le cartelle sono registrati nella sottochiave HKEY_CLASSES_ROOT\Directory\shellex\CopyHookHandlers. Creare una sottochiave di CopyHookHandlers denominata secondo il gestore e impostare il valore predefinito della sottochiave sul formato stringa del GUID (CLSID) dell'identificatore di classe del gestore.
Nell'esempio seguente viene aggiunta la sottochiave MyCopyHandler all'elenco dei gestori di hook di copia della Shell.
HKEY_CLASSES_ROOT
Directory
shellex
CopyHookHandlers
MyCopyHandler
(Default) = {MyCopyHandler CLSID GUID}
I gestori dei ganci di copia per gli oggetti della stampante vengono registrati essenzialmente nello stesso modo. L'unica differenza è che è necessario registrarli nella sottochiave HKEY_CLASSES_ROOT\Stampanti.
Osservazioni
In genere, gli utenti e le applicazioni possono copiare, spostare, eliminare o rinominare 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 hook di copia possono essere implementati anche per gli oggetti della stampante.
I gestori dei 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. Lo approva o lo veto solo. Se tutti i gestori approvano, la Shell esegue l'operazione. Se un gestore ha il veto dell'operazione, viene annullato e i gestori rimanenti non vengono chiamati. I gestori hook di copia non vengono informati dell'esito positivo o negativo dell'operazione, pertanto non possono essere usati per monitorare le operazioni sui file.
Argomenti correlati