Implementación y registro de un proveedor de puertos
El papel de un proveedor de puertos es supervisar y suministrar los puertos, que a su vez gestionan los procesos. Cuando es necesario crear un puerto, se crea una instancia del proveedor de puertos mediante CoCreate con el GUID del proveedor de puertos (el administrador de depuración de sesión [SDM] usará el proveedor de puertos que el usuario seleccionó o el proveedor de puertos especificado por el sistema del proyecto). A continuación, SDM llama a CanAddPort para ver si se pueden agregar puertos. Si se puede agregar un puerto, se solicita un puerto nuevo llamando a AddPort y pasándole un IDebugPortRequest2 que describe el puerto. AddPort
devuelve un nuevo puerto representado por una interfaz IDebugPort2.
Discusión
Un proveedor de puertos crea un puerto, que está asociado a un equipo o servidor de depuración. Un servidor enumera sus proveedores de puertos a través del método EnumPortSuppliers y un proveedor de puertos enumera sus puertos a través del método EnumPorts.
Además del registro COM típico, un proveedor de puertos debe registrarse en Visual Studio colocando su CLSID y su nombre en ubicaciones de registro específicas. Una función auxiliar del SDK de depuración denominada SetMetric
controla esta tarea: se llama una vez para que cada elemento se registre, por lo que:
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 proveedor de puertos anula el registro llamando a RemoveMetric
(otra función auxiliar del SDK de depuración) una vez por cada elemento registrado, de la siguiente manera:
RemoveMetric(metrictypePortSupplier,
<GUID of your port supplier>,
metricCLSID,
NULL);
RemoveMetric(metrictypePortSupplier,
<GUID of your port supplier>,
metricName,
NULL);
Nota
Los asistentes del SDK de para depurarSetMetric
y RemoveMetric
son funciones estáticas definidas en dbgmetric.h y compiladas en ad2de.lib. Los asistentes de metrictypePortSupplier
, metricCLSID
y metricName
también se definen en dbgmetric.h.
Un proveedor de puertos puede proporcionar su nombre y GUID a través de los métodos GetPortSupplierName y GetPortSupplierId, respectivamente.