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:
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
comokernelMode
. - Defina pelo menos um
struct
elemento (emcounterSet/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 ostruct
efield
de qual PCW deve ler o valor do contador.
- Defina o
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 noapplicationIdentity
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 chamaPcwRegister
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 oPCW_DATA
layout esperado pelas APIs pcw.
- O arquivo gerado por
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.
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.
Na instalação do componente, use
lodctr /m:<CounterManifest> <InstallPath>
para instalar o provedor. Na desinstalação do componente, useunlodctr
(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 doapplicationIdentity
manifesto com os<CounterManifest>
valores e<InstallPath>
usados na linha de comando dalodctr
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 doapplicationIdentity
atributo. - Caso contrário, o diretório de trabalho atual será combinado com o nome do arquivo do
applicationIdentity
atributo.
- Se o
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