Partager via


Mettre en œuvre et enregistrer un fournisseur de ports

Le rôle d'un fournisseur de port est de suivre et de fournir des ports, qui à leur tour gèrent des processus. Lorsqu'un port doit être créé, le fournisseur de port est instancié à l'aide de CoCreate avec le GUID du fournisseur de port (le gestionnaire de débogage de session [SDM] utilisera le fournisseur de port sélectionné par l'utilisateur ou le fournisseur de port spécifié par le système de projet). Le SDM appelle ensuite CanAddPort pour vérifier 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 renvoie un nouveau port représenté par une interface IDebugPort2.

Discussion

Un port est créé par un fournisseur de port, qui est associé à une machine ou à un serveur de débogage. Un serveur énumère ses fournisseurs de ports par le biais de la méthode EnumPortSuppliers, et un fournisseur de ports énumère ses ports par le biais de la méthode EnumPorts.

Outre l'enregistrement COM classique, un fournisseur de port doit s'enregistrer auprès de Visual Studio en plaçant son CLSID et son nom dans des emplacements spécifiques du registre. Une fonction d'aide du SDK de débogage appelée SetMetric s'occupe de cette tâche : elle est appelée une fois pour chaque élément à enregistrer :

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 port se désenregistre en appelant RemoveMetric (une autre fonction d'aide du SDK de débogage) une fois pour chaque élément qui a été enregistré, comme suit :

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

Remarque

Les aides SDKSetMetric pour le débogage et RemoveMetric sont des fonctions statiques définies dans dbgmetric.h et compilées dans ad2de.lib. Les aides metrictypePortSupplier, metricCLSID et metricName sont également définies dans dbgmetric.h.

Un fournisseur de port peut fournir son nom et son GUID par le biais des méthodes GetPortSupplierName et GetPortSupplierId, respectivement.