Implémenter et inscrire un fournisseur de ports

Le rôle d’un fournisseur de ports est de suivre et de fournir des ports, qui à leur tour gèrent les processus. Lorsqu’un port doit être créé, le fournisseur de ports est instancié à l’aide de CoCreate avec le GUID du fournisseur de ports (le gestionnaire de débogage de session [SDM] utilisera le fournisseur de ports que l’utilisateur a sélectionné ou le fournisseur de ports spécifié par le système de projet). Le SDM appelle ensuite CanAddPort pour voir si des ports peuvent être ajoutés. Si un port peut être ajouté, un nouveau port est demandé en appelant AddPort et en lui transmettant un IDebugPortRequest2 qui décrit le port. AddPort retourne un nouveau port représenté par une interface IDebugPort2 .

Discussion

Un port est créé par un fournisseur de ports, associé à un ordinateur ou à un serveur de débogage. Un serveur énumère ses fournisseurs de ports via laméthode EnumPortSuppliers , et un fournisseur de ports énumère ses ports via la méthode EnumPorts .

En plus de l’inscription COM classique, un fournisseur de ports doit s’inscrire auprès de Visual Studio en plaçant son CLSID et son nom dans des emplacements de Registre spécifiques. Une fonction d’assistance du Kit de développement logiciel (SDK) de débogage appelée SetMetric gère cette tâche : elle est appelée une seule fois pour que chaque élément soit inscrit, par conséquent :

SetMetric(metrictypePortSupplier,
          <GUID of your port supplier>,
          metricCLSID,
          <CLSID of your port supplier>,
          false,
          NULL)
SetMetric(metrictypePortSupplier,
          <GUID of your port supplier>,
          metricName,
          <name of your port supplier>,
          false,
          NULL);

Un fournisseur de ports se désinscrit lui-même en appelant RemoveMetric (une autre fonction d’assistance sdk de débogage) une fois pour chaque élément inscrit, par conséquent :

RemoveMetric(metrictypePortSupplier,
             <GUID of your port supplier>,
             metricCLSID,
             NULL);
RemoveMetric(metrictypePortSupplier,
             <GUID of your port supplier>,
             metricName,
             NULL);

Remarque

Les helpers du SDK pour le débogageSetMetric et RemoveMetric sont des fonctions statiques définies dans dbgmetric.h et compilées dans ad2de.lib. Les metrictypePortSupplier, metricCLSIDet metricName les helpers sont également définis dans dbgmetric.h.

Un fournisseur de ports peut fournir son nom et son GUID via les méthodes GetPortSupplierName et GetPortSupplierId, respectivement.