En général, vous devez définir plus précisément comment vous souhaitez divider (identifier) une "bonne" application qui est autorisée à utiliser votre objet COM à partir d'autres "mauvaises" applications. Si votre objet COM est un serveur in-proc (une DLL qui sera chargée dans l'espace d'adressage de l'application qui l'utilise), vous pouvez créer une solution "rapide & sale": A l'intérieur du DllMain
, vous pouvez tester le nom du fichier exe qui a chargé votre DLL. Vous pouvez le faire en respectant GetModuleFileName
avec NULL
comme premier paramètre. Si un "mauvais" exe essaie de charger votre dll, le DllMain
peut renvoyer FALSE
. Le même test que vous pouvez faire dans n'importe laquelle de votre méthode au lieu de DllMain
.
La meilleure façon générale de résoudre votre problème (le meilleur que je vois de cause) sera d'ajouter une méthode supplémentaire à votre objet COM que vous pouvez utiliser pour autoriser l'appelant. Par exemple, pour utiliser des fonctions «secrètes» telles que func1()
, vous pouvez demander à l'appelant d'appeler une autre fonction authorize()
auparavant. L'appelant donne à votre objet COM en tant que préfixe d'entrée de authorize()
certaines informations qui peuvent être utilisées pour vérifier les autorisations de l'appelant. Si l'autorisation est OK, authorize()
vous rendra un jeton d'autorisation (cookie) qui peut être tout ce que vous pourrez facilement vérifier plus tard. Les meilleurs jetons devraient être basés sur des algorithmes cryptographiques tels que la signature numérique. La fonction func1()
peut avoir un paramètre supplémentaire - le jeton (cookie) reçu de authorize1()
. De cette façon, vous pouvez mettre en œuvre tout type d'autorisation que vous voulez.De cette façon fonctionnera avec n'importe quel type d'objets COM (pas seulement avec les serveurs in-proc).
Avez-vous des suggestions, que pouvons-nous faire d'autre? – Baget
À la place, vous devrez compter sur les autorisations au niveau de l'utilisateur. Peut-être séparer votre code en 2 DLL et définir différentes autorisations au niveau du fichier. Vous pouvez également définir les autorisations de registre pour votre interface afin de restreindre les utilisateurs autorisés à y accéder. – Mike