Implementación y registro de un proveedor de puertos

El rol de un proveedor de puertos es realizar un seguimiento de los puertos y suministrarlos, que a su vez administran 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ándolo un IDebugPortRequest2 que describe el puerto. AddPort devuelve un nuevo puerto representado por una interfaz IDebugPort2 .

Debate

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 delmé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 mediante una llamada RemoveMetric a (otra función auxiliar del SDK de depuración) una vez para cada elemento registrado, por lo que:

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

Nota:

Los asistentes del SDK para depurarSetMetric y RemoveMetric son funciones estáticas definidas en dbgmetric.h y compiladas en ad2de.lib. Los metrictypePortSupplierasistentes , metricCLSIDy 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.