estrutura WNODE_HEADER (wmistr.h)
A estrutura WNODE_HEADER é o primeiro membro de todas as outras estruturas deXXX WNODE_. Ele contém informações comuns a todas essas estruturas.
Sintaxe
typedef struct _WNODE_HEADER {
ULONG BufferSize;
ULONG ProviderId;
union {
ULONG64 HistoricalContext;
struct {
ULONG Version;
ULONG Linkage;
} DUMMYSTRUCTNAME;
} DUMMYUNIONNAME;
union {
ULONG CountLost;
HANDLE KernelHandle;
LARGE_INTEGER TimeStamp;
} DUMMYUNIONNAME2;
GUID Guid;
ULONG ClientContext;
ULONG Flags;
} WNODE_HEADER, *PWNODE_HEADER;
Membros
BufferSize
Este membro especifica o tamanho, em bytes, do buffer nãopagado para receber qualquer WNODE_dados de XXX a serem retornados, incluindo essa estrutura WNODE_HEADER, membros adicionais de uma estrutura WNODE_XXX do tipo indicado por Flagse quaisquer dados determinados por WMI ou driver que acompanhem essa estrutura.
ProviderId
Se Flags estiver definido como WNODE_FLAG_EVENT_ITEM ou WNODE_FLAG_EVENT_REFERENCE, ProviderId deverá conter a ID do provedor WMI associado ao objeto do dispositivo. Você pode obter o valor ProviderId chamando IoWMIDeviceObjectToProviderId. Se Flags estiver definido como qualquer outro valor, esse membro será reservado.
DUMMYUNIONNAME
DUMMYUNIONNAME.HistoricalContext
Esse membro armazena o identificador na sessão de rastreamento de eventos.
DUMMYUNIONNAME.DUMMYSTRUCTNAME
DUMMYUNIONNAME.DUMMYSTRUCTNAME.Version
Este membro é reservado para WMI.
DUMMYUNIONNAME.DUMMYSTRUCTNAME.Linkage
Este membro é reservado para WMI.
DUMMYUNIONNAME2
DUMMYUNIONNAME2.CountLost
Reservado
DUMMYUNIONNAME2.KernelHandle
Este membro é reservado para WMI.
DUMMYUNIONNAME2.TimeStamp
Esse membro indica o momento em que um driver coletou os dados WNODE_XXX. Esse valor de hora é expresso no formato de tempo absoluto do sistema. A hora absoluta do sistema é o número de intervalos de 100 nanossegundos desde o início do ano 1601 no calendário gregoriano. Um driver pode chamar KeQuerySystemTime para obter esse valor. Se o bloco for gravado em um arquivo de log (WNODE_FLAG_LOG_WNODE), um driver NT também poderá definir WNODE_FLAG_USE_TIMESTAMP no sinalizadores de para solicitar que o agente do sistema deixe o valor de TimeStamp inalterado.
Guid
Esse membro indica o GUID que representa o bloco de dados associado ao WNODE_XXX a ser retornado.
ClientContext
Esse membro armazena o tipo de relógio para a sessão. Os valores possíveis são incluídos na tabela a seguir.
Valor | Descrição |
---|---|
1 | Valor do contador de desempenho (também chamado de QPC, QueryPerformanceCounter ou PerfCounter) |
2 | Temporizador do sistema |
3 | Ciclo da CPU |
Flags
Esse membro indica o tipo de estrutura deXXX WNODE_que contém a estrutura WNODE_HEADER:
WNODE_FLAG_ALL_DATA
O restante de uma estrutura de WNODE_ALL_DATA segue a estrutura WNODE_HEADER no buffer.
O WMI define esse sinalizador na estrutura WNODE_HEADER que ele passa com uma solicitação de IRP_MN_QUERY_ALL_DATA.
Um driver define esse sinalizador na estrutura WNODE_HEADER de um evento que consiste em todas as instâncias de um bloco de dados. Se o tamanho do bloco de dados for idêntico para todas as instâncias, um driver também definirá WNODE_FLAG_FIXED_INSTANCE_SIZE.
WNODE_FLAG_EVENT_ITEM
Um driver define esse sinalizador para indicar que a estrutura deXXX WNODE_foi gerada como um evento. Esse sinalizador só será válido se WNODE_FLAG_ALL_DATA, WNODE_FLAG_SINGLE_INSTANCE ou WNODE_FLAG_SINGLE_ITEM também estiver definido.
WNODE_FLAG_EVENT_REFERENCE
O restante de uma estrutura de WNODE_EVENT_REFERENCE segue a estrutura WNODE_HEADER no buffer.
Um driver define esse sinalizador quando gera um evento maior que o tamanho máximo especificado no registro para um evento. O WMI usa as informações na estrutura WNODE_EVENT_REFERENCE para solicitar os dados do evento e agenda essa solicitação de acordo com o valor de WNODE_FLAG_SEVERITY_MASK.
WNODE_FLAG_METHOD_ITEM
O restante de uma estrutura de WNODE_METHOD_ITEM segue a estrutura WNODE_HEADER no buffer.
O WMI define esse sinalizador na estrutura WNODE_HEADER que ele passa com uma solicitação de IRP_MN_EXECUTE_METHOD.
WNODE_FLAG_SINGLE_INSTANCE
O restante de uma estrutura de WNODE_SINGLE_INSTANCE segue a estrutura WNODE_HEADER no buffer.
O WMI define esse sinalizador na estrutura WNODE_HEADER que ele passa com uma solicitação para consultar ou alterar uma instância.
Um driver define esse sinalizador na estrutura WNODE_HEADER de um evento que consiste em uma única instância de um bloco de dados.
WNODE_FLAG_SINGLE_ITEM
O restante de uma estrutura de WNODE_SINGLE_INSTANCE segue a estrutura WNODE_HEADER no buffer.
O WMI define esse sinalizador na estrutura WNODE_HEADER que ele passa com uma solicitação para alterar um item.
Um driver define esse sinalizador na estrutura WNODE_HEADER de um evento que consiste em um único item de dados.
WNODE_FLAG_TOO_SMALL
O restante de uma estrutura de WNODE_TOO_SMALL segue a estrutura WNODE_HEADER no buffer.
Um driver define esse sinalizador quando passa uma estrutura WNODE_TOO_SMALL, indicando que o buffer é muito pequeno para que todos os dadosXXX WNODE_sejam retornados.
Além disso, flags podem ser definidos com um ou mais dos seguintes sinalizadores que fornecem informações adicionais sobre o WNODE_XXX:
WNODE_FLAG_FIXED_INSTANCE_SIZE
Todas as instâncias de um bloco de dados têm o mesmo tamanho. Esse sinalizador será válido somente se WNODE_FLAG_ALL_DATA também estiver definido.
WNODE_FLAG_INSTANCES_SAME
O número de instâncias e os nomes de instância dinâmica em uma estrutura WNODE_ALL_DATA a ser retornada são idênticos aos retornados da consulta WNODE_ALL_DATA anterior. Esse sinalizador será válido somente se WNODE_FLAG_ALL_DATA também estiver definido. Esse sinalizador é ignorado para blocos de dados registrados com nomes de instância estática.
Para um desempenho otimizado, um driver deve definir esse sinalizador se puder controlar alterações no número ou nomes de seus blocos de dados. O WMI pode ignorar o processamento necessário para detectar e atualizar nomes de instância dinâmica.
WNODE_FLAG_STATIC_INSTANCE_NAMES
O WNODE_XXX dados a serem retornados não inclui nomes de instância.
O WMI define esse sinalizador antes de solicitar dados WNODE_XXX para blocos de dados registrados com nomes de instância estática. Depois de receber o WNODE_xxx retornado do driver, o WMI preenche os nomes de instância estáticos especificados no registro antes de passar o WNODE_XXX retornado para um consumidor de dados.
WNODE_FLAG_PDO_INSTANCE_NAMES
Os nomes de instância estática são baseados na ID da instância do dispositivo do PDO para o dispositivo. Um driver solicita esses nomes definindo WMIREG_FLAG_INSTANCE_PDO no WMIREGGUID usa para registrar o bloco.
O WMI define esse sinalizador antes de solicitar dados WNODE_XXX para blocos de dados registrados com nomes de instância baseados em PDO.
WNODE_FLAG_SEVERITY_MASK
O nível de gravidade determinado pelo driver do evento associado a um WNODE_EVENT_REFERENCEretornado, com 0x00 indicando o nível menos grave e 0xff indicando o nível mais grave.
O WMI usa o valor desse sinalizador para priorizar suas solicitações para os dados do evento.
WNODE_FLAG_USE_TIMESTAMP
O agente do sistema não deve modificar o valor de timeStamp definido pelo driver.
Um driver NT também pode definir Flags como um ou mais dos seguintes valores para blocos de eventos a serem gravados em um arquivo de log do sistema:
WNODE_FLAG_LOG_WNODE
Um bloco de eventos deve ser enviado ao agente do sistema. O cabeçalho do evento é uma estrutura de WNODE_HEADER padrão. Se o driver limpar WNODE_FLAG_TRACED_GUID, o bloco também será enviado ao WMI para entrega a todos os consumidores de dados que habilitaram o evento. O driver deve alocar o WNODE_ XXX da memória do pool. O WMI libera a memória depois de entregar o evento aos consumidores de dados.
WNODE_FLAG_TRACED_GUID
Um bloco de eventos deve ser enviado somente para o agente do sistema. Ele não é enviado para consumidores de dados WMI. O cabeçalho do evento é uma estrutura EVENT_TRACE_HEADER, declarada em Evntrace.h, em vez de um WNODE_HEADER. O driver deve alocar memória para aXXX WNODE_e liberá-la após retorna IoWMIWriteEvent. O driver pode alocar essa memória da pilha ou minimizar a sobrecarga de alocar e liberar a memória do armazenamento local do thread do driver se o driver criar e manter seu próprio pool de threads.
WNODE_FLAG_USE_GUID_PTR
O Guid membro aponta para um GUID na memória, em vez de conter o guid em si. O agente do sistema desreferencia o ponteiro antes de passar os dados para o consumidor. Esse sinalizador será válido somente se WNODE_FLAG_LOG_WNODE ou WNODE_FLAG_TRACED_GUID também estiverem definidos.
WNODE_FLAG_USE_MOF_PTR
Os dados que seguem os membros fixos de uma estrutura deXXX WNODE_consistem em uma matriz de estruturas de MOF_FIELD, definidas em Evntrace.h, que contêm ponteiros para dados e tamanhos em vez dos próprios dados. A matriz pode conter até MAX_MOF_FIELD elementos. O agente do sistema desreferencia os ponteiros antes de passar os dados para o consumidor Esse sinalizador é válido apenas para blocos registrados com WMIREG_FLAG_TRACED_GUID.
Observações
Em uma solicitação IRP_MN_CHANGE_XXX ou IRP_MN_EXECUTE_METHOD, bufferSize no IRP indica o tamanho máximo em bytes do buffer de saída, enquanto bufferSize no WNODE_HEADER de entrada para essa solicitação indica o tamanho, em bytes, dos dados de entrada no buffer.
Requisitos
Requisito | Valor |
---|---|
cabeçalho | wmistr.h (inclua Wmistr.h) |