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.