Compartilhar via


Implementar e registrar um fornecedor de porta

A função de um fornecedor de portos é monitorar e fornecer 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 Session Debug Manager [SDM] usará o fornecedor de porta que o usuário selecionou ou o fornecedor de porta especificado pelo sistema de projetos). Em seguida, o SDM chama CanAddPort para ver se alguma porta pode ser adicionada. Se uma porta puder ser adicionada, uma nova porta será solicitada chamando AddPort e passando uma IDebugPortRequest2 que descreve a porta. AddPort retorna uma nova porta representada por uma interface IDebugPort2 .

Discussão

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

Além do registro COM típico, um fornecedor de portas deve se registrar no Visual Studio colocando seu CLSID e seu nome em locais específicos do Registro do Windows. Uma função auxiliar do SDK de Depuração chamada SetMetric cuida dessa tarefa: ela é chamada uma vez para cada item a ser registrado, portanto:

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 seu próprio 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 metrictypePortSupplier, metricCLSID e metricName auxiliares também são definidos em dbgmetric.h.

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