2010-11-23 50 views
5

Je regardais l'accès au registre des vsjitdebugger.exe utilisant Process Monitor, et je remarque que parfois il interroge le registre de la manière suivante (quelques informations entendue rectifier):Comment (et quand) COM TreatAs fonctionne-t-il?

HKCU\Software\Classes\CLSID\{some-guid} NAME NOT FOUND Desired Access: Read 
... 
HKCU\Software\Classes\CLSID\{some-guid}\TreatAs NAME NOT FOUND Desired Access: Query Value 
... 
HKCU\Software\Classes\CLSID\{some-guid}\InprocServer32 NAME NOT FOUND Desired Access: Read 
... 
HKCR\CLSID\{24E669E1-E90F-4595-A012-B0FD3CCC5C5A}\InprocServer32 SUCCESS Desired Access: Read 

Informations sur TreatAs on MSDN montre qu'il permet de spécifier un GUID pour un autre serveur COM qui sera appelé à la place de l'original.

Je n'ai pas pu trouver beaucoup plus d'informations sur cette clé, et je n'ai pas pu l'utiliser sur mon propre objet COM: j'ai deux implémentations différentes du même objet COM (dans deux DLL séparées, ayant 2 GUID séparés), et quand mon processus crée l'objet via GUID, je voudrais qu'il crée l'autre objet à la place (via le GUID spécifié dans TreatAs). Malheureusement, il semble que Windows essaie immédiatement d'interroger HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32, au lieu de chercher d'abord TreatAs.

Ma question concerne essentiellement les règles de treatAs, quand et comment est-elle interrogée?

Répondre

2

TreatAs fonctionnalité fonctionne assez simple: avec une demande de CoCreateInstance une instance d'un objet COM, contrôle du sous-système COM pour TreatAs clé et, une fois trouvé, les tentatives d'une classe de substitution/émulation et le retour en toute transparence au lieu de la demande CLSID. L'appelant obtient ainsi une interface d'un objet d'émulation de manière transparente.

Cette fonctionnalité est rarement utilisée mais toujours utilisée. Vous pouvez énumérer les classes TreatAs actuellement actives en utilisant l'utilitaire EnumerateTreatAsClasses. La fonctionnalité est l'une des méthodes pour accrocher l'instanciation de la classe COM.

+0

Même si j'ai demandé cela il y a presque 3 ans, j'apprécie la réponse :) Je –

+0

d'ailleurs remarqué que la question. J'utilise TreatAs pour accrocher les instanciations DirectShow Filter Graph Manager dans mon outil [DirectShowSpy] (http://alax.info/blog/777). –