Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Il est important de comprendre la structure DLL requise d’un gestionnaire de filtres (implémentation de l’interface IFilter ).
Cette rubrique est organisée comme suit :
- Implémentation et exportation des points d’entrée DLL
- Implémentation de la classe IFilter et de la fabrique de classes
- Héritage des interfaces COM
- Implémentation des méthodes d’interface COM
- Ressources additionnelles
- rubriques connexes
Implémentation et exportation des points d’entrée DLL
Chaque DLL IFilter (indiquée par Ifilter.dll dans cette section) doit implémenter et exporter les points d’entrée suivants. Ces points d’entrée sont généralement exportés à l’aide d’un fichier de définition de module (.def) pour l’interface IFilter ou à l’aide du mot clé __declspec(dllexport). Le fichier DLL peut être inscrit dans n’importe quel dossier, mais il réside généralement dans le dossier %SystemRoot%\system32.
Les points d’entrée DLL sont répertoriés et décrits dans le tableau suivant.
| Nom de la DLL | Description de la DLL |
|---|---|
| DllRegisterServer | Le point d’entrée DllRegisterServer inscrit la DLL en tant que filtre dans le Registre. Vous inscrivez la DLL en exécutant le programme regsvr32.exe avec le nom de fichier DLL de l’interface IFilter en tant qu’argument : regsvr32.exe %SystemRoot%\system32\Ifilter.dll |
| DllUnregisterServer, fonction | Le point d’entrée de la fonction DllUnregisterServer supprime la DLL en tant que gestionnaire persistant dans le Registre. Vous annulez l’inscription de la DLL en exécutant le programme regsvr32.exe avec l’indicateur /u : regsvr32.exe /u %SystemRoot%\system32\Ifilter.dll |
| DllGetClassObject, fonction | Le client d’indexation de contenu appelle le point d’entrée de la fonction DllGetClassObject , par le biais de Component Object Model (COM), pour créer un objet de fabrique de classes pour l’interface IFilter et obtenir un pointeur vers l’interface de fabrique de classe de cet objet. |
| Fonction DllCanUnloadNow | Le client d’indexation de contenu appelle le point d’entrée de la fonction DllCanUnloadNow , via COM, pour déterminer s’il est possible de décharger la DLL IFilter . L’interface IFilter est déchargée une fois qu’elle n’est pas utilisée pendant un intervalle de temps, comme spécifié par la valeur de Registre FilterIdleTimeOut. |
Implémentation de la classe IFilter et de la fabrique de classes
Au moins deux classes, telles que CFilter et CFilterCF, sont généralement implémentées par chaque DLL IFilter . La classe CFilter produit l’objet d’interface IFilter qui implémente la fonctionnalité de filtrage de contenu. Ses fonctions membres implémentent les méthodes d’interface de l’interface IFilter . Chaque classe IFilter nécessite un identificateur de classe unique (CLSID), que l’implémenteur d’interface IFilter génère.
La classe CFilterCF produit l’objet de fabrique de classes pour l’interface IFilter . La fabrique de classes est appelée, par le biais de son interface IClassFactory Interface, par le point d’entrée de la Fonction DllGetClassObject. La classe CFilterCF crée l’objet CFilter et retourne un pointeur vers IUnknown. Dans des cas plus complexes, un IFilter peut implémenter une hiérarchie de classes à la place de la classe CFilter unique.
Héritage des interfaces COM
Windows Search 3.0 et versions ultérieures nécessitent l’utilisation d’IPersistStream pour les raisons suivantes :
- Pour garantir les performances et la compatibilité future.
- Pour renforcer la sécurité. Les IFilters implémentés avec IPersistStream sont plus sécurisés, car le contexte dans lequel l’interface IFilter s’exécute n’a pas besoin des droits pour ouvrir des fichiers sur le disque ou sur le réseau.
- Bien que Windows Search utilise uniquement IPersistStream, la classe d’interface IFilter peut également hériter de l’interface IPersistFile et/ou des implémentations d’interface IPersistStorage Interface pour la compatibilité descendante.
Ces interfaces sont déclarées dans les fichiers inclus dans le répertoire mssdk\include et ont des identificateurs d’interface prédéfinis (IID). Le client d’indexation de contenu interroge l’interface IFilter via IUnknown pour déterminer quelles interfaces utiliser lors du filtrage du contenu.
Implémentation des méthodes d’interface COM
L’interface IFilter implémente les méthodes IUnknown pour la classe d’interface IFilter et la fabrique de classes d’interface IFilter . Le tableau suivant répertorie, dans l’ordre vtable, les interfaces et méthodes spécifiques à l’interface IFilter que l’interface IFilter doit implémenter. L’interface IFilter doit implémenter au moins IPersistStream, mais peut implémenter des interfaces dérivées d’IPersist supplémentaires.
| Interface COM | Méthode |
|---|---|
| IClassFactory, interface | CreateInstance, LockServer |
| IClassFactory2, interface | GetLicInfo, RequestLicKey, CreateInstanceLic |
| IFilter | IFilter::Init, IFilter::GetChunk, IFilter::GetText, IFilter::GetValue, IFilter::BindRegion |
| IPersist Interface | GetClassID |
| Interface IPersistFile | IsDirty, Load, Save, SaveCompleted, GetCurFile |
| Interface IPersistStorage | IsDirty, Load, Save, GetSizeMax |
| IPersistStream | Méthodes: IsDirty, Load, Save, GetSizeMax |
La page de référence de chaque méthode spécifie les paramètres et le comportement fonctionnel de cette méthode. Chaque page de référence fournit également les codes de résultat à implémenter pour cette méthode. Les pages de référence des méthodes IFilter fournissent les codes de résultat spécifiques à l'interface FACILITY_ITF à implémenter, et le client d'indexation de contenu peut également gérer l'un des codes de résultat génériques, tels que FACILITY_NULL et FACILITY_WIN32. Pour plus d’informations, consultez Structure des codes d’erreur COM.
Méthodes COM qui ne sont pas implémentées
L’interface IFilter doit implémenter au moins IPersistStream, mais n’a pas besoin d’implémenter d’interfaces dérivées d’IPersist supplémentaires.
Windows Search n’a pas besoin d’implémenter les méthodes COM répertoriées dans le tableau suivant.
| Méthode qui n’est pas obligatoire | Descriptif |
|---|---|
| IPersistStream ::IsDirty | Les filtres doivent retourner E_NOTIMPL. |
| IPersistStream ::Save | Les filtres doivent retourner E_NOTIMPL. |
| IPersistStream ::GetSizeMax | Les filtres doivent retourner E_NOTIMPL. |
| IFilter ::BindRegion | Les filtres doivent retourner E_NOTIMPL. |
Ressources supplémentaires
- L’exemple de code IFilterSample , disponible sur GitHub, montre comment créer une classe de base IFilter pour implémenter l’interface IFilter .
- Pour obtenir une vue d’ensemble du processus d’indexation, consultez Le processus d’indexation.
- Pour obtenir une vue d’ensemble des types de fichiers, consultez Types de fichiers.
- Pour interroger les attributs d'association de fichiers d'un type de fichier, consultez PerceivedTypes, SystemFileAssociations et Enregistrement d'application.
Rubriques connexes
Développement de gestionnaires de filtres
Présentation des gestionnaires de filtres dans Windows Search
Meilleures pratiques pour la création de gestionnaires de filtres dans Windows Search
Retour de propriétés à partir d’un gestionnaire de filtres
Gestionnaires de filtres fournis avec Windows