2010-11-23 12 views
5

que estaba buscando en el acceso al registro de vsjitdebugger.exe usando Process Monitor, y me di cuenta de que veces se consulta el registro de la siguiente manera (algo de información omitido):¿Cómo (y cuándo) funciona COM TreatAs?

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 

Información sobre TreatAs on MSDN muestra que permite especificar un GUID para otro servidor COM que se llamará en lugar del original.

No pude encontrar mucha más información acerca de esta clave, y no pude usarla en mi propio objeto COM: tengo dos implementaciones diferentes del mismo objeto COM (en 2 DLL separadas, teniendo 2 GUID separados), y cuando mi proceso crea el objeto a través de GUID, me gustaría crear el otro objeto en su lugar (a través del GUID especificado en TreatAs). Desafortunadamente, parece que Windows intenta inmediatamente consultar HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32, en lugar de buscar primero TreatAs.

Mi pregunta básicamente es acerca de las reglas de TreatAs, cuándo y cómo se consultan?

Respuesta

2

TreatAs característica funciona bastante simple: con una solicitud para CoCreateInstance una instancia de un objeto COM, cheques subsistema COM para TreatAs llave y, cuando lo encuentra, intenta crear una instancia de una clase de sustitución/emulación y transparente devolverlo en lugar de solicitada CLSID. El que llama, por lo tanto, obtiene una interfaz de un objeto de emulación de forma transparente.

La característica se utiliza raramente, pero se sigue utilizando. Puede enumerar las clases TreatAs actualmente activas utilizando la utilidad EnumerateTreatAsClasses. La característica es uno de los métodos para enlazar la creación de instancias de clase COM.

+0

A pesar de que le pregunté esto hace casi 3 años, agradezco la respuesta :) –

+0

Me di cuenta por casualidad de la pregunta. Yo uso TreatAs para enganchar instancias DirectShow Filter Graph Manager en mi herramienta [DirectShowSpy] (http://alax.info/blog/777). –

Cuestiones relacionadas