Registrazione e distribuzione di gestori di proprietà

In questo argomento viene illustrato come creare e registrare gestori di proprietà per l'uso con il sistema di proprietà Di Windows.

Questo argomento è organizzato come segue:

Registrazione e distribuzione di gestori di proprietà

Dopo aver implementato il gestore di proprietà, deve essere registrato e l'estensione del nome file deve essere associata al gestore. L'esempio seguente che usa l'estensione .recipe illustra le voci del Registro di sistema necessarie a tale scopo.

HKEY_CLASSES_ROOT
   CLSID
      {50d9450f-2a80-4f08-93b9-2eb526477d1a}
         (Default) = Recipe Property Handler
         ManualSafeSave [REG_DWORD] = 00000001
         InProcServer32
            (Default) = C:\\SDK\\PropertyHandlerSample\\bin\\RecipeHandlers.dll
            ThreadingModel = Apartment
HKEY_LOCAL_MACHINE
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               PropertySystem
                  PropertyHandlers
                     .recipe
                        (Default) = {50d9450f-2a80-4f08-93b9-2eb526477d1a}

I gestori di proprietà per un particolare tipo di file vengono comunemente distribuiti con le applicazioni che creano o modificano i file di quel tipo. È tuttavia consigliabile rendere disponibili anche i gestori di proprietà indipendentemente da queste applicazioni per supportare l'indicizzazione del tipo di file negli scenari server in cui i gestori di proprietà vengono usati dall'indicizzatore, ma le applicazioni che le accompagnano non sono necessarie. Se si crea un pacchetto di installazione autonomo per il gestore delle proprietà, assicurarsi che includa quanto segue:

  • Dettagli di registrazione del gestore delle proprietà specificati nell'argomento Registrazione e distribuzione dei gestori di proprietà.
  • Registrazione per il tipo di file e tutti i file di schema che devono essere installati, per consentire ai client di accedere a tutte le funzionalità del gestore delle proprietà.

Considerazioni sulle prestazioni e sull'affidabilità per i gestori di proprietà

I gestori di proprietà vengono richiamati per ogni file in un determinato computer. Vengono in genere chiamati nelle circostanze seguenti:

  • Durante l'indicizzazione del file. Questa operazione viene eseguita in modalità out-of-process, in un processo isolato con diritti limitati.
  • Quando si accede ai file in Esplora risorse per la lettura e la scrittura dei valori delle proprietà. Questa operazione viene eseguita in-process.

Linee guida per prestazioni e affidabilità

In qualsiasi momento, un utente potrebbe avere decine di migliaia di file di qualsiasi tipo specifico (incluso il proprio) nei computer e può accedere o modificare uno o tutti questi file in qualsiasi momento. Poiché i gestori di proprietà vengono spesso richiamati per supportare queste operazioni di accesso e modifica, le caratteristiche di prestazioni e affidabilità del gestore delle proprietà in ambienti occupati, gli ambienti altamente simultanei sono di importanza critica.

Tenere presenti le linee guida seguenti durante lo sviluppo e il test del gestore delle proprietà.

  • Enumerazione proprietà

    I gestori di proprietà devono avere un tempo di risposta molto rapido nell'enumerazione delle relative proprietà. I calcoli a elevato utilizzo di memoria dei valori delle proprietà, delle ricerche di rete o della ricerca di risorse diverse dal file stesso devono essere evitati per garantire tempi di risposta rapidi.

  • Scrittura delle proprietà sul posto

    Se possibile, quando si gestiscono file di dimensioni medie o grandi (diverse centinaia di KB o superiori), il formato di file deve essere disposto in modo che la lettura o la scrittura di valori delle proprietà non richieda la lettura dell'intero file dal disco. Anche se il file deve essere cercato, non deve essere letto in memoria nel suo intero perché questo bloats il working set di Esplora risorse o l'indicizzatore di Windows Search durante il tentativo di accesso o indicizzazione di questi file. Per altre informazioni, vedere Inizializzazione dei gestori di proprietà.

    Una tecnica utile per eseguire questa operazione consiste nel riempire l'intestazione del file con spazio aggiuntivo in modo che alla successiva scrittura di un valore di proprietà, il valore può essere scritto sul posto senza dover riscrivere l'intero file. Questa operazione richiede la funzionalità ManualSafeSave. Questo approccio comporta un rischio aggiuntivo che l'operazione di scrittura del file potrebbe essere interrotta mentre la scrittura è in corso (a causa di un arresto anomalo del sistema o perdita di alimentazione), ma poiché le dimensioni delle proprietà sono in genere ridotte, la probabilità di un'interruzione di questo tipo è analogamente ridotta e i miglioramenti delle prestazioni che possono essere realizzati tramite la scrittura delle proprietà sul posto sono considerati sufficientemente significativi per giustificare questo rischio aggiuntivo. Anche in questo caso, è necessario prestare attenzione a testare l'implementazione in modo esteso per assicurarsi che i file non siano danneggiati nel caso in cui si verifichi un errore durante un'operazione di scrittura.

    Infine, quando si implementa la scrittura di proprietà sul posto con ManualSafeSave, a volte non è possibile eseguire l'operazione sul posto e l'intero flusso deve essere riscritto comunque. Per facilitare la riscrittura, il flusso fornito durante l'inizializzazione del gestore supporta l'interfaccia IDestinationStreamFactory . L'interfaccia IDestinationStreamFactory consente alle implementazioni del gestore di ottenere un flusso temporaneo per la scrittura; quando vengono completate tutte le operazioni di scrittura e viene chiamato il metodo IDestinationStream::GetDestinationStream , questo flusso viene usato per sostituire completamente il flusso di file originale. Quando si usa il flusso di destinazione, il flusso di file originale deve essere considerato di sola lettura, perché verrà sostituito dal flusso di destinazione dopo la chiamata del metodo IDestinationStreamFactory::GetDestinationStream .

  • Scelta del modello di threading COM

    Per ottimizzare l'efficienza del gestore di proprietà, è necessario specificare che usa il modello Bothdi threading COM . Ciò consente l'accesso diretto da appartamenti STA (Ad esempio, Esplora risorse) e appartamenti dell'agente di trasferimento messaggi (MTA) (il processo SearchProtocolHost in Windows Search, ad esempio), evitando il sovraccarico del marshalling in tali ambienti. Per ottenere il massimo vantaggio del Both modello di threading, tutti i servizi da cui dipende il gestore devono essere designati Both per evitare il marshalling nelle chiamate a tali componenti. Controllare la documentazione di questi servizi specifici per verificare se usano questo modello di threading.

  • Concorrenza del gestore delle proprietà

    I gestori di proprietà e l'interfaccia IPropertyStore sono progettati per l'accesso seriale anziché per l'accesso simultaneo. Esplora risorse, indicizzatore di Windows Search e tutte le altre chiamate del gestore di proprietà dalla codebase di Windows garantiscono questo utilizzo. Non è necessario che terze parti usino simultaneamente un gestore di proprietà, ma questo comportamento non può essere garantito. Inoltre, anche se si prevede che il modello chiamante sia seriale, le chiamate possono venire su thread diversi (ad esempio, quando l'oggetto viene chiamato in remoto tramite RPC COM, come avviene nell'indicizzatore). Pertanto, le implementazioni del gestore di proprietà devono supportare la chiamata su thread diversi e idealmente non dovrebbero subire alcun effetto negativo quando viene chiamato simultaneamente. Poiché il modello di chiamata previsto è seriale, una semplice implementazione che usa una sezione critica deve essere sufficiente per soddisfare questi requisiti nella maggior parte dei casi. È accettabile evitare di bloccare le chiamate simultanee usando la funzione TryEnterCriticalSection per rilevare e non eseguire chiamate simultanee.

  • Concorrenza dei file

    I gestori di proprietà vengono spesso usati negli scenari in cui più applicazioni accedono simultaneamente a un file. Di conseguenza, il gestore e le applicazioni devono gestire la concorrenza specificando le modalità di condivisione appropriate all'apertura del file. Devono anche essere consapevoli dell'accesso specificato dalle altre applicazioni e per gestire i casi in cui l'accesso non è consentito. È consigliabile che tutti i consumer specifichino modalità di condivisione liberale per consentire ad altri utenti di accedere contemporaneamente al file, ma quando si esegue questa operazione, è necessario gestire i problemi di coerenza. Le decisioni sulle modalità di condivisione più appropriate da usare devono essere prese nel contesto della community delle applicazioni che accedono al file.

    I file system consentono alle applicazioni di aprire i file in modo da controllare se e come altre applicazioni possono aprire il file. Le modalità di condivisione consentono l'accesso in lettura, scrittura ed eliminazione. Il sistema di proprietà supporta un subset di queste modalità di condivisione, descritte nella tabella seguente.

    Modalità di accesso Modalità di condivisione
    Write Negare altri lettori e scrittori
    Scrittura (EnableShareDenyWrite) Abilitare altri lettori, negare altri writer
    Sola lettura (impostazione predefinita) Abilitare altri lettori, negare altri writer
    Sola lettura (EnableShareDenyNone) Abilitare altri lettori e writer

     

    I gestori di proprietà aperti per la scrittura (GPS_READWRITE) negheranno altri lettori e writer. I gestori possono acconsentire esplicitamente al comportamento che consente ai lettori di specificare il flag (che implica l'abilitazione EnableShareDenyWrite della lettura) nella registrazione.

    I gestori di proprietà aperti per la lettura (GPS_DEFAULT), per impostazione predefinita abilitano altri lettori, ma negano altri writer. I gestori possono acconsentire esplicitamente all'abilitazione di altri writer specificando il EnableShareDenyNone flag nella relativa registrazione. Ciò significa che un gestore può gestire correttamente una situazione in cui il contenuto di un file cambia mentre il gestore sta leggendo il file.

    Per le definizioni di flag, vedere GETPROPERTYSTOREFLAGS.

Informazioni sui gestori delle proprietà

Uso dei nomi dei tipi

Utilizzo degli elenchi di proprietà

Inizializzazione dei gestori di proprietà

Procedure consigliate e domande frequenti sul gestore delle proprietà