Procedure consigliate per la creazione di gestori di filtri in Windows Search
Microsoft Windows Search usa filtri per estrarre il contenuto degli elementi per l'inclusione in un indice full-text. È possibile estendere Windows Search per indicizzare i tipi di file nuovi o proprietari scrivendo gestori di filtri per estrarre il contenuto e i gestori delle proprietà per estrarre le proprietà dei file. I filtri sono associati ai tipi di file, come indicato dalle estensioni del nome file, dai tipi MIME o dagli identificatori di classe (CLSID). Mentre un filtro può gestire più tipi di file, ogni tipo funziona con un solo filtro.
In questo argomento sono incluse le sezioni seguenti:
Codice nativo
In Windows 7 e versioni successive i filtri scritti nel codice gestito vengono bloccati in modo esplicito. I filtri DEVONO essere scritti nel codice nativo a causa di potenziali problemi di controllo delle versioni CLR con il processo in cui vengono eseguiti più componenti aggiuntivi.
Procedure di codice sicure per Windows Search
Di seguito sono riportate le procedure per la scrittura di applicazioni sicure da usare con Windows Search.
Per le applicazioni di query:
- Quando si scrivono client di ricerca, è necessario scegliere l'API eseguita in un contesto di sicurezza che consente all'utente il privilegio minimo. Ad esempio, le pagine ASP possono usare l'oggetto query IXSSO, che viene eseguito come processo utente.
Per IFilter e le risorse del linguaggio:
- Se un nuovo gestore di filtro per un tipo di file viene installato come sostituzione di una registrazione di filtro esistente, il programma di installazione deve salvare la registrazione corrente e ripristinarlo se il nuovo gestore del filtro viene disinstallato. Non esiste alcun meccanismo per concatenare i filtri. Di conseguenza, il nuovo gestore di filtri è responsabile della replica di qualsiasi funzionalità necessaria del filtro precedente.
- IFilter, word breaker e stemmer per Windows Search vengono eseguiti nel contesto sicurezza locale. Devono essere scritti per gestire i buffer e per eseguire correttamente lo stack. Tutte le copie di stringa devono disporre di controlli espliciti per proteggere gli overrun del buffer. È sempre necessario verificare la dimensione allocata del buffer e testare le dimensioni dei dati rispetto alle dimensioni del buffer. Gli overrun del buffer sono una tecnica comune per sfruttare il codice che non applica restrizioni relative alle dimensioni del buffer.
- IFilter, i componenti word breaker e stemmer non devono mai chiamare la funzione ExitProcess Function o l'API simile che termina un processo e tutti i relativi thread.
- Non allocare o liberare risorse nel punto di ingresso DllMain. Ciò può causare errori durante i test di stress a bassa risorsa.
- Codificare tutti gli oggetti da inserire in thread-safe. Windows Search chiama qualsiasi istanza di word breaker o stemmer in un thread alla volta, ma può chiamare più istanze contemporaneamente in più thread.
- Evitare di creare file temporanei o scrivere nel Registro di sistema.
- Se si usa il compilatore Microsoft Visual C++, assicurarsi di compilare l'applicazione usando l'opzione /GS. L'opzione /GS viene usata per rilevare l'overrun del buffer. L'opzione /GS inserisce i controlli di sicurezza nel codice compilato. Per altre informazioni, vedere DllGetClassObject Function /GS (Controllo sicurezza buffer) nella sezione Opzioni del compilatore Visual C++ di Platform SDK.
Risorse aggiuntive
- L'esempio IFilterSample illustra come creare una classe di base IFilter per implementare l'interfaccia IFilter .
- Per una panoramica del processo di indicizzazione, vedere Processo di indicizzazione.
- Per una panoramica dei tipi di file, vedere Tipi di file.
- Per eseguire query sugli attributi di associazione di file per un tipo di file, vedere PerceivedTypes, SystemFileAssociations e Application Registration.
Argomenti correlati