Existe-t-il un moyen de connecter ou d'intercepter les appels CoGetClassObject et / ou CoCreateInstance?

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

Question

Je voudrais intercepter la commande CoCreateInstanceEx et / ou fonctions CoGetClassObject pour remplacer une classe par une cale de test dans un test unitaire. Ce ne sera que pour un seul CLSID; tous les autres peuvent passer sans changement. Y a-t-il un moyen de faire cela sans horribles pirates?

Était-ce utile?

La solution

Cela dépend de ce que vous voulez exactement.

Si vous voulez savoir qui charge cette classe ou pour savoir si elle est chargée, vous pouvez utiliser Moniteur de processus . Un appel à CoGetClassObject () (ou CoCreateInstanceEx () ) mènera à une clé HKCR \ CLSID \ {Classe d'intérêt id} en cours de lecture et Process Monitor vous montrera quel processus, quand et comment il fonctionne.

Si vous souhaitez remplacer une classe existante par la vôtre - compilez une bibliothèque avec votre version de classe avec le même identifiant de classe et modifiez le chemin d'accès au serveur COM à l'intérieur de HKCR \ CLSID \ {Identifiant de classe d'intérêt} afin que votre bibliothèque soit utilisée pour servir une classe avec cet identifiant. Vous pouvez le faire manuellement ou avec regsvr32 - enregistrez d'abord la bibliothèque d'origine, puis le vôtre pour remplacer la classe de la classe d'intérêt. COM fait classe id - > Mappage de bibliothèque par cette clé lorsqu'un consommateur appelle CoGetClassObject () ou CoCreateInstanceEx () .

Autres conseils

Il y a toujours la fonction CoTreatAsClass : http://msdn.microsoft.com/en-us /library/ms693452(VS.85).aspx

Mais, comme vous l'avez indiqué, ce sera un remplacement de la classe à l'échelle du système, pas un changement local.

Vous pouvez également envisager de suspendre CoCreateInstance comme suggéré dans le message référencé par le commentaire de Shay Erlichmen.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top