Partilhar via


Implementar e registar um fornecedor portuário

O papel de um fornecedor portuário é rastrear e abastecer portos, que, por sua vez, gerenciam processos. Quando uma porta precisa ser criada, o fornecedor de porta é instanciado usando CoCreate com o GUID do fornecedor de porta (o gerenciador de depuração de sessão [SDM] usará o fornecedor de porta que o usuário selecionou ou o fornecedor de porta especificado pelo sistema de projeto). Em seguida, o SDM chama CanAddPort para ver se alguma porta pode ser adicionada. Se uma porta puder ser adicionada, uma nova porta é solicitada chamando AddPort e passando-lhe um IDebugPortRequest2 que descreve a porta. AddPort retorna uma nova porta representada por um IDebugPort2 interface.

Discussão

Uma porta é criada por um fornecedor de porta, que está associado a uma máquina ou servidor de depuração. Um servidor enumera os seus fornecedores de portas através do método EnumPortSuppliers, e um fornecedor de porta enumera as suas portas através do método EnumPorts.

Além do registro COM típico, um fornecedor de porta deve se registrar no Visual Studio colocando seu CLSID e nome em locais de registro específicos. Uma função auxiliar do SDK de depuração chamada SetMetric lida com essa tarefa: ela é chamada uma vez para cada item a ser registrado, assim:

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);

Um fornecedor de porta cancela o registro chamando RemoveMetric (outra função auxiliar do SDK de Depuração) uma vez para cada item que foi registrado, assim:

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

Observação

Os auxiliares do SDK para depuraçãoSetMetric e RemoveMetric são funções estáticas definidas em dbgmetric.h e compiladas em ad2de.lib. Os auxiliares metrictypePortSupplier, metricCLSIDe metricName também são definidos em dbgmetric.h.

Um fornecedor de porta pode fornecer seu nome e GUID através dos métodos GetPortSupplierName e GetPortSupplierId, respectivamente.