CogetclassObject 및/또는 CocreateInstance 호출을 연결하거나 가로 채는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/1604913

문제

com을 가로 채고 싶습니다 CocreateInstanceEx 및/또는 CogetclassObject 단위 테스트에서 클래스를 테스트 심로 교체하는 기능. 이것은 단일 clsid에만 해당됩니다. 다른 모든 사람들은 변하지 않은 것을 통과 할 수 있습니다. 끔찍하고 사악한 해킹없이 이것을 할 수있는 방법이 있습니까?

도움이 되었습니까?

해결책

그것은 당신이 정확히 원하는 것에 달려 있습니다.

해당 클래스를로드하는 사람을 감지하거나 사용할 수있는 전혀로드되는지 여부를 찾으려면 프로세스 모니터. 전화 CoGetClassObject() (또는 CoCreateInstanceEx())로 이어질 것입니다 HKCR\CLSID\{Class of interest id} 키가 읽기 및 프로세스 모니터는 어떤 프로세스와 시대와 성공을 보여줍니다.

기존 클래스를 귀하의 것으로 바꾸려면 - 동일한 클래스 ID로 클래스 버전으로 라이브러리를 컴파일하고 내부의 COM 서버 경로를 변경하십시오. HKCR\CLSID\{Class of interest id} 도서관이 해당 ID로 수업을 제공하는 데 사용됩니다. 수동으로 또는 Regsvr32를 사용하여 수행 할 수 있습니다. 먼저 원래 라이브러리를 등록한 다음 관심 클래스 레지 스테이션을 무시할 수 있습니다. com은 소비자가 호출 할 때 해당 키를 통해 클래스 ID-> 라이브러리 매핑을합니다. CoGetClassObject() 또는 CoCreateInstanceEx().

다른 팁

항상 있습니다 CoTreatAsClass 기능:http://msdn.microsoft.com/en-us/library/ms693452(vs.85).aspx

그러나 당신이 언급했듯이, 그것은 지역 변화가 아니라 클래스의 시스템 전체 교체가 될 것입니다.

또는 Shay Erlichmen의 의견에 의해 언급 된 게시물에서 제안한대로 CocreateInstance를 연결할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top