Implementação e registrando um fornecedor de porta
A função de um fornecedor de porta é controlar e portas, que por sua vez, gerenciar processos de fornecimento. No momento em que uma porta precisa ser criado, o fornecedor de porta é instanciado usando CoCreate com GUID do fornecedor de porta (o Gerenciador de sessão de depuração [SDM] usará o usuário selecionado do fornecedor de porta ou o fornecedor de porta especificado pelo sistema do projeto). Em seguida, chamará o SDM IDebugPortSupplier2::CanAddPort para ver se todas as portas podem ser adicionadas. Se uma porta pode ser adicionada, uma nova porta é solicitada, chamando IDebugPortSupplier2::AddPort e passando um IDebugPortRequest2 que descreve a porta. AddPortretornará uma nova porta representada por um IDebugPort2 interface.
Discussão
Uma porta é criada por um fornecedor de porta, que por sua vez associado com um servidor de depuração ou de máquina. Um servidor pode enumerar a seus fornecedores de porta por meio aIDebugCoreServer2::EnumPortSuppliers método e um fornecedor de porta podem enumerar suas portas através do IDebugPortSupplier2::EnumPorts método.
Com o registro COM típico, um fornecedor de porta deve ser registrado com Visual Studio, colocando seu nome e o CLSID em locais específicos do registro. Uma função auxiliar do SDK de depuração chamado SetMetric manipula esta tarefa: ele é chamado 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 registro próprio chamando RemoveMetric (outra função de auxiliar de depuração SDK) 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);
Dica
O SDK auxiliares para depuraçãoSetMetric e RemoveMetric são funções estáticas definido em dbgmetric.h e compilados em ad2de.lib.O metrictypePortSupplier, metricCLSID, e metricName auxiliares também são definidos no dbgmetric.h.
Um fornecedor de porta pode fornecer seu nome e o GUID através dos métodos IDebugPortSupplier2::GetPortSupplierName e IDebugPortSupplier2::GetPortSupplierId, respectivamente.