Partilhar via


Usando contadores de desempenho do modo Kernel

Os componentes do modo kernel fornecem contadores de desempenho usando as APIs de Contadores de Desempenho para Windows (PCW).

Use as seguintes etapas para desenvolver novos provedores de dados de contador:

  1. Escreva um manifesto de contador que descreva o provedor e seus contadores. O manifesto do contador é um arquivo de formato XML que define o provedor de contador de desempenho e seus contadores.

    • Defina o applicationIdentity atributo como o nome de um binário que será instalado como parte do componente do modo kernel e que conterá os recursos de cadeia de caracteres necessários para os consumidores de dados de desempenho.
    • Defina o atributo providerType como kernelMode.
    • Defina pelo menos um struct elemento (em counterSet/structs) com o nome de uma estrutura C/C++ que será usada ao passar valores de contador do componente para as APIs pcw.
    • Em cada counter, defina o struct e field de qual PCW deve ler o valor do contador.
  2. Como parte do processo de build do componente, use a ferramenta CTRPP para compilar o manifesto do contador. (A ferramenta CTRPP (Pré-processador de contador) está incluída no WDK e está disponível no Prompt de Comando do Desenvolvedor digitando ctrpp.) A ferramenta CTRPP gerará um .rc arquivo e um .h arquivo.

    • O arquivo gerado por .rc CTRPP deve ser compilado pela ferramenta Compilador de Recursos (RC.exe) e o arquivo resultante .res deve ser vinculado ao binário nomeado no applicationIdentity atributo . Você pode compilar diretamente o arquivo gerado pelo .rc CTRPP ou #include pode o arquivo gerado por .rc CTRPP em um arquivo existente .rc que está sendo compilado no binário.
    • O arquivo gerado pelo .h CTRPP contém funções auxiliares que encapsulam as APIs pcw subjacentes. Por exemplo, o arquivo gerado por .h CTRPP conterá uma função RegistrarXxx que chama PcwRegister em seu nome. Na maioria dos casos, você chamará as funções auxiliares geradas por CTRPP em vez de chamar qualquer APIs pcw diretamente, mas você pode consultar a documentação das APIs pcw para entender o que as funções geradas por CTRPP correspondentes estão fazendo. As funções auxiliares gerenciam a tradução do layout de dados do contador do componente para o PCW_DATA layout esperado pelas APIs pcw.
  3. Na inicialização do componente, invoque a função RegisterXxx gerada por CTRPP, que chama PcwRegister. No desligamento do componente, invoque a função UnregisterXxx gerada por CTRPP, que chama PcwUnregister.

  4. Adicione código para fornecer dados de contador. Isso é feito implementando uma função de retorno de chamada PCW_CALLBACK ou mantendo estruturas de dados com valores de contador para cada instância e invocando as funções CreateInstanceXxx e CloseInstanceXxx geradas por CTRPP à medida que as instâncias são criadas e destruídas.

  5. Na instalação do componente, use lodctr /m:<CounterManifest> <InstallPath> para instalar o provedor. Na desinstalação do componente, use unlodctr (com /m ou /g parâmetros) para desinstalar o provedor. A instalação do provedor adiciona os contadores do provedor a um repositório em todo o sistema de contadores disponíveis para que os contadores possam ser usados por consumidores de dados de desempenho, como perfmon, typeperf ou WMI. Em particular, a instalação do provedor registra o caminho completo para o binário (arquivo DLL, SYS ou EXE) que contém a tabela de cadeia de caracteres do provedor. O caminho completo para o binário é determinado combinando o atributo do applicationIdentity manifesto com os <CounterManifest> valores e <InstallPath> usados na linha de comando da lodctr seguinte maneira:

    • Se o applicationIdentity atributo for um caminho completo, ele será usado.
    • Caso contrário, se o <InstallationPath> parâmetro for um caminho completo, ele será usado.
    • Caso contrário, se o <CounterManifest> parâmetro for um caminho completo, o diretório de <CounterManifest> será combinado com o nome do arquivo do applicationIdentity atributo.
    • Caso contrário, o diretório de trabalho atual será combinado com o nome do arquivo do applicationIdentity atributo.

Para obter um exemplo de um provedor PCW no modo kernel, consulte o Kcs (Exemplo de Contador de Kernel) no repositório de exemplos de driver do Windows no GitHub.

Confira também

Monitoramento de desempenho do modo kernel

PcwRegister

PCW_CALLBACK

Esquema de contadores de desempenho

Ferramenta CTRPP