2010-09-28 16 views
4

J'ai un IFilter écrit en Delphi que j'essaie de faire fonctionner sous Windows 7 Desktop Search 64 bits.Utilisation d'un objet Com 32 bits à partir d'un IFilter 64 bits

Étant donné qu'il est développé en Delphi, je peux seulement compiler ceci comme une DLL 32 bits. Pour contourner ce problème, j'essaie d'écrire une DLL IFilter 64 bits dans Visual C++ qui utilise en interne mon objet 32bit IFilter Com en utilisant la technique DllSurogate décrite here.

J'ai tout cela fonctionne correctement sous une application de console de test 64 bits. Je peux créer une instance de mon wrapper 64 bits, qui crée en interne l'objet IFilter 32 bits et y délègue tous les appels. Je peux ensuite récupérer le contenu de mon document. Le problème est que lorsque j'enregistre avec WDS, l'encapsuleur 64 bits ne peut plus créer l'objet 32 ​​bits. CoCreateInstance renvoie 'Echec de l'exécution du serveur' (CO_E_SERVER_EXEC_FAILURE).

Ce qui je suis en train de créer l'objet 32 ​​bits à côté de l'enveloppe 64 bits

result = CoCreateInstance(clsid, 0, CLSCTX_LOCAL_SERVER , IID_IFilter, (LPVOID*)&m_pFilter); 

Toute idée pourquoi cela se passe. Est-ce une limitation des autorisations avec IFilters dans WDS?

Merci pour toute aide à ce sujet.

Répondre

7

Oui c'est. Les IFilters s'exécutent dans un processus d'hébergement nommé SearchFilterHost.exe. Étant donné que les filtres peuvent potentiellement ouvrir des fichiers avec un contenu malveillant, l'hôte s'exécute avec des privilèges très restreints. La capacité de démarrer un processus ne serait certainement pas incluse. Aucune idée sur la façon de contourner cela, ou d'ailleurs si vous devriez même envisager de le faire. Googling "searchfilterhost.exe" apporte beaucoup de cloches d'alarme. Ça doit être une nouvelle douloureuse, désolé d'être le porteur.

+0

Est-ce que vous (ou quelqu'un d'autre) savez si SQL Server et SharePoint ont les mêmes limitations? Je suis incapable de les tester en ce moment et je ne trouve aucune information sur Google. Je le fais principalement pour SharePoint, peut-être qu'il y a de l'espoir! Sinon, je dois repenser – Jamie

1

Gardez également à l'esprit que l'application appelante ne sera pas obligée de décharger votre ifilter après chaque utilisation. Il réutilisera ifilter en mémoire pour analyser de nombreux fichiers. Cependant, si le processus hôte détecte un problème (comme une fuite de mémoire croissante), il va décharger votre ifilter et réessayer. J'ai travaillé avec le code ifilter sur 32 bits il y a quelques années, mais je n'ai pas été en mesure d'aborder les limitations beaucoup plus strictes sur 64 bits. Si vous découvrez comment cela est fait, j'espère que vous êtes prêt à poster des détails sur le net ...