Criando uma DLL de extensão de desempenho
Importante
Devido a limitações significativas de desempenho e confiabilidade, o método para fornecer dados de contador de desempenho que este tópico descreve pode ser alterado ou indisponível no futuro. Em vez disso, a Microsoft recomenda que você use o método descrito em Fornecendo dados de contador usando a versão 2.0 para criar novos contadores de desempenho e que você migre contadores de desempenho existentes para usar esse método também.
Um provedor V1 usa uma DLL de desempenho que fornece dados de contador aos consumidores. A DLL de desempenho deve exportar as funções OpenPerformanceData, CollectPerformanceData e ClosePerformanceData . Normalmente, você usa um arquivo de definição de módulo (.def) para exportar as funções da DLL. O sistema chama essas funções quando um consumidor consulta dados de desempenho.
Na primeira vez que um consumidor chama RegQueryValueEx ou se o consumidor usa a função RegOpenKey ou RegConnectRegistry para abrir HKEY_PERFORMANCE_DATA
, o sistema chama a função OpenPerformanceData para cada provedor registrado no computador. A exceção será se o provedor especificar a lista de objetos aos quais ele dá suporte na [objects]
seção do arquivo .INI. Nesse caso, o sistema chamará o provedor somente se um dos objetos consultados corresponder a um objeto da lista.
A função OpenPerformanceData dá a cada provedor a oportunidade de inicializar suas estruturas de dados de desempenho. Em seguida, se a função OpenPerformanceData retornar com êxito, o sistema chamará a função CollectPerformanceData do provedor. Chamadas subsequentes para RegQueryValueEx fazem com que o sistema chame a função CollectPerformanceData .
Quando o consumidor termina de coletar dados de desempenho, ele especifica HKEY_PERFORMANCE_DATA
em uma chamada para a função RegCloseKey . Isso faz com que o sistema chame a função ClosePerformanceData para cada provedor. Em seguida, os provedores são descarregados.
É possível que vários consumidores coletem dados de desempenho ao mesmo tempo. O sistema chama as funções OpenPerformanceData e ClosePerformanceData apenas uma vez cada vez que a DLL é carregada ou descarregada.
Observação
Inclua extern "C" no código C++ para impedir que o compilador adicione decorações aos nomes de função; caso contrário, o sistema pode não encontrar suas funções.
Observação
Se ocorrer um erro ao carregar sua DLL de desempenho, localizar suas funções ou chamar suas funções, o sistema desabilitará o provedor para coleções subsequentes dentro do mesmo processo. Além disso, se isso ocorrer durante a execução em um processo privilegiado, o sistema adicionará um valor Desabilitar Contadores de Desempenho à chave de desempenho para impedir que o provedor seja carregado no futuro.
Para obter mais informações sobre como escrever uma DLL de desempenho, consulte os seguintes tópicos: