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?
Même si j'ai demandé cela il y a presque 3 ans, j'apprécie la réponse :) Je –
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). –