2010-11-23 5 views
5

내가 Process Monitor를 사용 vsjitdebugger.exe의 레지스트리 액세스보고 있었다, 나는 가끔는 다음과 같은 방식으로 레지스트리 (omited 약간의 정보) 조회 것으로 나타났습니다 :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 

TreatAs on MSDN에 대한 정보가 지정 할 수 있음을 보여줍니다 원본 대신 호출 될 다른 COM 서버의 GUID입니다.

이 키에 대한 더 많은 정보를 찾을 수 없어서 내 자신의 COM 개체에서 사용할 수 없었습니다. 두 개의 서로 다른 동일한 COM 개체 (두 개의 별도 DLL에서 2 별도의 GUID), 내 프로세스 GUID를 통해 개체를 만들 때 TreatAs 지정한 GUID를 통해 대신 다른 개체를 만들고 싶습니다. 불행히도 Windows가 TreatAs를 먼저 찾지 않고 즉시 HKCU\Software\Classes\CLSID\{my-guid}\InprocServer32을 쿼리하는 것으로 보입니다.

제 질문은 기본적으로 TreatAs의 규칙에 관한 것입니다. 언제 어떻게 질문을 받습니까?

답변

2

TreatAs 기능은 아주 간단합니다 작동합니다 발견했을 때 COM 개체의 인스턴스가, TreatAs에 대한 COM 서브 시스템 점검 키, 대체/에뮬레이션 클래스를 인스턴스화하고 투명하게 반환 대신의 요청을 시도 CoCreateInstance에 요청 CLSID. 따라서 호출자는 에뮬레이션 객체의 인터페이스를 투명하게 얻습니다.

이 기능은 거의 사용되지 않지만 여전히 사용됩니다. EnumerateTreatAsClasses 유틸리티를 사용하여 현재 활성 TreatAs 클래스를 열거 할 수 있습니다. 이 기능은 COM 클래스 인스턴스화를 후킹하는 방법 중 하나입니다.

+0

내가 거의 3 년 전에이 질문을했지만 대답에 감사드립니다. –

+0

나는 부수적으로 질문에주의했습니다. TreatAs를 사용하여 내 [DirectShowSpy] (http://alax.info/blog/777) 도구에서 DirectShow 필터 그래프 관리자의 인스턴스를 연결합니다. –

관련 문제