Существует ли способ сцепить или прервать вызовы CoGetClassObject и/или CoCreateInstance?

Система. Строка является хорошим примером неизменного класса с методами set и видоизменяющимися методами, только что каждый метод видоизменения возвращает новый экземпляр.

7
задан bdonlan 22 October 2009 в 03:42
поделиться

2 ответа

Это зависит от того, что именно вы хотите.

Если вы хотите определить, кто загружает этот класс, или узнать, загружен ли он вообще, вы можете использовать Монитор процессов . Вызов CoGetClassObject () (или CoCreateInstanceEx () ) приведет к чтению ключа HKCR \ CLSID \ {Class of Interest id} и Process Monitor покажет вам, в каком процессе и когда это происходит и насколько успешно.

Если вы хотите заменить существующий класс своим - скомпилируйте библиотеку с вашей версией класса с тем же идентификатором класса и измените путь к COM-серверу внутри HKCR \ CLSID \ {Идентификатор интересующего класса} , чтобы ваша библиотека использовалась для обслуживания класса с этим идентификатором. Вы можете сделать это вручную или с помощью regsvr32 - сначала зарегистрируйте исходную библиотеку, а затем свою, чтобы отменить регистрацию интересующего класса. COM выполняет сопоставление идентификатора класса и библиотеки через этот ключ, когда потребитель вызывает CoGetClassObject () или CoCreateInstanceEx () .

.
2
ответ дан 7 December 2019 в 12:22
поделиться

There's always the CoTreatAsClass function: http://msdn.microsoft.com/en-us/library/ms693452(VS.85).aspx

But, as you noted, it will be a system-wide replacement of the class, not a local change.

Alternatively, you could look into hooking CoCreateInstance as suggested in the post referenced by Shay Erlichmen's comment.

3
ответ дан 7 December 2019 в 12:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: