Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Outre l’exécution en tant qu’exécutable de serveur local (EXE), un objet COM peut également empaqueter lui-même pour s’exécuter en tant qu’application de service lorsqu’il est activé par un client local ou distant. Les services prennent en charge de nombreuses fonctionnalités d’administration intégrées à l’interface utilisateur et utiles, notamment le démarrage local et distant, l’arrêt, la suspension et le redémarrage, ainsi que la possibilité d’établir le serveur pour s’exécuter sous un compte d’utilisateur et une station de fenêtre spécifiques.
Un objet écrit en tant que service est installé pour une utilisation par COM en établissant une valeur LocalService sous sa clé AppID et en effectuant une installation de service standard.
Les classes peuvent également être configurées pour s’exécuter sous un compte d’utilisateur spécifique lorsqu’elles sont activées par un client distant sans être écrites en tant qu’application de service. Pour ce faire, la classe installe un nom d’utilisateur et un mot de passe à utiliser lorsque le SCM lance son processus de serveur local.
Lorsqu’une classe est configurée de cette façon, les appels à CoRegisterClassObject avec ce CLSID échouent, sauf si le processus a été lancé par COM pour le compte d’une demande d’activation réelle. En d’autres termes, les classes configurées pour s’exécuter en tant qu’utilisateur particulier ne peuvent pas être inscrites sous une autre identité.
Le nom d’utilisateur est extrait de la valeur nommée RunAs sous la clé APPID de la classe. Si le nom d’utilisateur est « Utilisateur interactif », le code de classe est exécuté dans le contexte de sécurité de l’utilisateur actuellement connecté et est connecté à la station de fenêtre interactive.
Sinon, le mot de passe est récupéré à partir d’une partie masquée du Registre disponible uniquement pour les administrateurs de l’ordinateur et pour le système. Le nom d’utilisateur et le mot de passe sont ensuite utilisés pour créer une session d’ouverture de session dans laquelle le code de classe est exécuté. Lorsqu’il est lancé de cette façon, le code de classe s’exécute avec son propre bureau et station de fenêtres et ne partage pas de descripteurs de fenêtre, le presse-papiers ou d’autres éléments d’interface utilisateur avec l’utilisateur interactif ou avec d’autres classes qui s’exécutent dans d’autres comptes d’utilisateur.
Un serveur inscrit auprès de LocalService ou d’RunAs peut inscrire un objet dans la table d’objets en cours d’exécution pour permettre à n’importe quel client de se connecter à celui-ci. Pour ce faire, l’appel du serveur à IRunningObjectTable ::Register doit définir l’indicateur ROTFLAGS_ALLOWANYCLIENT. Pour qu’un serveur définisse ce bit, le nom de son exécutable doit figurer dans la section AppID du registre qui fait référence à l'AppID de l'exécutable. Un serveur « activer en tant qu’activateur » (non inscrit en tant que LocalService ou RunAs) peut ne pas inscrire un objet avec cet indicateur.
Rubriques connexes
-
Inscrire un EXE Server en cours d’exécution