2010-03-13 6 views
3

J'ai un contrôle ActiveX que je charge avec JavaScript dans Internet Explorer. Il doit fonctionner en tant qu'intégrité moyenne sous UAC dans Vista et Win7. Ceci est écrit en C/C++, compilé dans Visual Studio. Une façon d'élever les privilèges est de créer un processus de courtier qui peut demander un niveau d'intégrité moyen. Cependant, pour ce projet, ce n'est pas une solution pratique. J'ai vraiment besoin du contrôle ActiveX lui-même pour s'exécuter élevé.Charger ActiveX DLL dans Internet Explorer avec des privilèges élevés

Ma question est la suivante: quelle est la façon la plus simple de le faire? Puis-je modifier les options de compilation du projet pour en faire un exe, et utiliser le système de connexion interprocess COM pour gérer automatiquement les communications, ou dois-je être plus sophistiqué? Ai-je besoin de faire quelque chose de compliqué comme appeler manuellement CreateProcess et faire une sorte de courtier, ou cela peut-il fonctionner comme un exe ActiveX qui s'élève?

Répondre

3

Cela dépend principalement de ce que fait votre contrôle ActiveX, comment vous l'intégrez dans une page et comment il est implémenté.

L'approche la plus simple serait probablement de l'implémenter en tant que serveur EXE, de l'enregistrer comme il convient et de lui donner les autorisations d'exécution sur le média Low Rights Elevation Policy. Si vous ne voulez pas aller aussi loin, vous pouvez écrire un simple serveur hors processus personnalisé que vous inscrivez à nouveau et que vous implémentez votre propre IClassFactory pour créer des requêtes de création de proxy dans la DLL existante. Vous pouvez même ajouter une clé AppID pour votre objet existant et spécifier que c'est un DllSurrogate cependant (autre que de l'enregistrer comme une application COM +) vous pourriez ne pas être facilement capable de forcer la création de l'objet dans le substitut (parce que la valeur par défaut IE est de spécifier CLSCTX_ALL lors de la création d'objets qui vont d'abord capturer l'enregistrement en cours de processus). Bien sûr, après tout cela, si votre code fait trop de suppositions sur l'endroit où il se trouve ou utilise des interfaces non-proxy, il peut ne pas fonctionner de toute façon.

+0

Cela fonctionnera-t-il aussi pour le formulaire OCX ActiveX? – Ghigo

Questions connexes