CogetclassObject 및/또는 CocreateInstance 호출을 연결하거나 가로 채는 방법이 있습니까?
-
05-07-2019 - |
문제
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를 연결할 수 있습니다.