OVH Cloud OVH Cloud

Patch GUID/CLSID

14 réponses
Avatar
Cyrille Szymanski
Bonjour,

est-il possible de patcher un ActiveX pour changer son GUID et ProgID sans
avoir à tout recompiler ?

J'ai vu des programmes qui patchent des CLSID (pour remplacer un composant
par une autre implémentation équivalente) en faisant un tout bête
chercher/remplacer dans les EXE; ils fonctionnenent avec plus ou moins de
succès.

--
Cyrille Szymanski

4 réponses

1 2
Avatar
Cyrille Szymanski
"Vincent Burel" wrote in
news:441889b7$0$18312$:

pourquoi vous ne le considérez pas comme une DLL privée (sans
l'enregistrer) vous faite un LoadLibrary et un GetProAdress pour
obtenir son DllGetClassObject... et c'est fini , non ?



Pas bête du tout :-) En fait ça revient tout simplement à réécrire
CoCreateInstance() sans passer par la BDR (le noeud du problème est de
récupérer un IClassFactory)

Pour ceux que ça intéresse :
* LoadLibrary
* GetProcAddress("DllGetClassObject")
* DllGetClassObject(CLSID, IID_IClassFactory)
* classFactory->CreateInstance(NULL, IID)

Merci beaucoup pour cette aide qui m'a économisé quelques journées de
travail.
--
Cyrille Szymanski
Avatar
Cyrille Szymanski
"Patrick Philippot" wrote in news:dvb6b0
$1vev$:

Le fait de créer temporairement une entrée dans la clé CLSID ne pose pas
de problème particulier. De plus, comme le précise Vincent, il est
toujours possible de faire le binding à la main après un chargement
explicite de la DLL.



Quand on fait un CoCreateInstance, c'est en fait ce qui se passe de
manière automatique. Le système recherche la clé InprocServer32 ou
LocalServer32 pour le CLSID en question, localise le module à charger et
fait un chargement explicite. Le module, au moment du chargement,
enregistre lui-même sa (ou ses) class factory(ies) auprès du système qui
est ensuite capable de réclamer l'instanciation de l'objet et de
récupérer au minimum son interface IUnknown.



J'ai finalement opté pour ce court-circuitage de CoCreateInstance().

La bonne nouvelle c'est que ça m'a pris moins de 5 minutes à mettre en
pratique. L'autre bonne nouvelle c'est que le code fait à peine 10 lignes
ce qui est un bon point pour la maintenance.

Merci beaucoup pour vos explications claires.

--
Cyrille Szymanski
Avatar
françois
"Arnold McDonald (AMcD)" wrote in message
news:44169d81$0$9656$
Patrick Philippot wrote:

> D'où l'avantage de .Net

[...]

> Vous y viendrez... :-) .

J'en doute.



Ca commence a décoller, apres 4 ans de dur démarrage.
Beaucoup de nouveaux projets sont en .Net.
Avatar
Patrick Philippot
françois wrote:
Ca commence a décoller, apres 4 ans de dur démarrage.



En France. Ailleurs, cela a été plus vite. Il est vrai que nous sommes
coutumiers du fait: attendre un peu pour voir si les autres se plantent.
Mais cette fois-ci nous sommes franchement décalés.

Il y a des raisons structurelles à cela. Aborder .Net, c'est aussi
devoir prendre en compte des sujets traditionnellement négligés chez
nous et en particulier la programmation orientée objet. .Net, c'est de
l'objet ou rien. Ceux qui n'ont pas cette culture doivent s'y former
avant de bénéficier pleinement de l'infrastructure .Net. XML est
également présent à tous les niveaux de .Net. Pour les gros projets, UML
ou une méthodologie objet seront nécessaires.

Devant l'effort de formation qui en découle, beaucoup d'entreprises ont
longtemps reculé. Ce qui n'a fait qu'amplifier le problème. Mais
effectivement, il semblerait que ça se décoince.

--
Patrick Philippot - Microsoft MVP
MainSoft Consulting Services
www.mainsoft.fr
1 2