Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Esta seção descreve as extensões WMI para WDM (suportadas pelo Windows 2000 e posterior) que os drivers de modo kernel, como provedores de informações, podem usar para fornecer informações aos consumidores de informações. Os drivers geralmente fornecem informações que um consumidor usa para determinar a configuração do driver e o uso de recursos. Além das extensões WMI para WDM, uma API de modo de usuário oferece suporte a provedores ou consumidores de informações de eventos WMI — consulte o SDK do Windows para obter mais informações.
O registrador de rastreamento de eventos suporta até 32 instâncias. Uma das instâncias é reservada para rastrear o kernel. O logger suporta o rastreamento de uma alta taxa de eventos.
Os eventos de rastreamento são definidos da mesma maneira que outros eventos WMI. Os eventos WMI são descritos no arquivo MOF. Para obter mais informações sobre descrições de eventos WMI, consulte Sintaxe MOF para dados WMI e blocos de eventos.
O processo pelo qual os drivers de modo kernel registram informações é integrado à infraestrutura WMI existente. Para registrar eventos de rastreamento, um driver faz o seguinte:
Registre-se como um provedor WMI chamando IoWMIRegistrationControl.
Marque eventos como rastreáveis definindo WMIREG_FLAG_TRACED_GUID no membro Flags da estrutura WMIREGGUID que é passado quando o driver registra eventos com WMI.
Especifique um evento como o evento de controle para ativação/desativação geral de um conjunto de eventos de rastreamento definindo WMIREG_FLAG_TRACE_CONTROL_GUID no membro Flags da estrutura WMIREGGUID que é passado quando o driver registra eventos com WMI.
Ao receber uma solicitação do WMI para habilitar eventos em que o GUID corresponde ao GUID de controle de rastreamento, o driver deve armazenar o identificador para o registrador. O valor será requerido ao escrever um evento. Para obter informações sobre como usar esse identificador, consulte a etapa 6. O valor do identificador do logger está contido no membro HistoricalContext da parte WNODE_HEADER do buffer WMI que faz parte dos parâmetros na solicitação de ativação de eventos.
Decida se o evento de rastreamento será enviado aos consumidores de eventos WMI ou se será direcionado apenas para o registrador de eventos WMI. Isso determinará de onde deve vir a memória para a estrutura EVENT_TRACE_HEADER . Essa memória eventualmente será passada para IoWMIWriteEvent.
Se o evento for apenas um evento de log, a memória não será excluída pelo WMI. Nesse caso, o driver deve passar um buffer na pilha ou reutilizar um buffer alocado para essa finalidade. Por razões de desempenho, o driver deve minimizar quaisquer chamadas desnecessárias para alocar ou liberar memória. O não cumprimento desta recomendação comprometerá a integridade das informações de cronometragem contidas no ficheiro de registo.
Se o evento deve ser enviado para o logger e para os consumidores de eventos WMI, a memória deve ser alocada de um pool não paginado. Neste caso, o evento será enviado para o registador e, em seguida, encaminhado para o WMI para ser enviado aos consumidores do evento WMI que solicitaram a notificação do evento. A memória para o evento será então liberada pelo WMI de acordo com o comportamento de IoWMIWriteEvent.
Depois que a memória do EVENT_TRACE_HEADER e quaisquer dados de evento do driver, se houver, tiverem sido protegidos, as seguintes informações devem ser definidas:
Defina o membro Tamanho como sizeof(EVENT_TRACE_HEADER) mais o tamanho de quaisquer dados de evento de driver adicionais que serão anexados ao final de EVENT_TRACE_HEADER.
Defina o membro Flags como WNODE_FLAG_TRACED_GUID para que o evento seja enviado para o registrador. Se o evento também for enviado para consumidores de eventos WMI, defina o WNODE_FLAG_LOG_WNODE. Observe que não é necessário definir WNODE_FLAG_TRACED_GUID se estiver definindo WNODE_FLAG_LOG_WNODE. Se ambos estiverem definidos, WNODE_FLAG_TRACED_GUID terá precedência e o evento não será enviado aos consumidores de eventos do WMI.
Defina o membro Guid ou GuidPtr. Se estiver usando GuidPtr, defina WNODE_FLAG_USE_GUID_PTR no membro Flags .
Opcionalmente, especifique um valor para TimeStamp. Se o driver não especificar um valor de carimbo de data/hora , o registrador preencherá isso. Se o driver não quiser que o registador estabeleça o carimbo de data, deve-se definir WNODE_FLAG_USE_TIMESTAMP no membro Flags.
Defina qualquer um dos seguintes membros EVENT_TRACE_HEADER que tenham significado para o driver: Class.Type, Class.Level e Class.Version.
Finalmente, lance o EVENT_TRACE_HEADER para um WNODE_HEADER e defina o valor HistoricalContext do Wnode para o identificador do registrador que foi salvo na etapa 4 acima.
Chame IoWMIWriteEvent, com o ponteiro para a estrutura EVENT_TRACE_HEADER.
O driver deve continuar a registar eventos de rastreamento associados ao GUID de controlo até o driver receber uma notificação para desativar o registo de eventos por meio de uma solicitação IRP_MN_DISABLE_EVENTS.