Share via


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: