estrutura WNODE_HEADER (wmistr.h)
A estrutura WNODE_HEADER é o primeiro membro de todas as outras estruturas WNODE_XXX . 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
Esse membro especifica o tamanho, em bytes, do buffer nãopagado para receber quaisquer dados WNODE_XXX a serem retornados, incluindo essa estrutura WNODE_HEADER , membros adicionais de uma estrutura WNODE_XXX do tipo indicado por Flags e 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
Esse membro é reservado para WMI.
DUMMYUNIONNAME.DUMMYSTRUCTNAME.Linkage
Esse membro é reservado para WMI.
DUMMYUNIONNAME2
DUMMYUNIONNAME2.CountLost
Reservado
DUMMYUNIONNAME2.KernelHandle
Esse membro é reservado para WMI.
DUMMYUNIONNAME2.TimeStamp
Esse membro indica a hora em que um driver coletou os dados WNODE_XXX . Esse valor de hora é expresso no formato de hora 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 deve ser gravado em um arquivo de log (WNODE_FLAG_LOG_WNODE), um driver NT também pode definir WNODE_FLAG_USE_TIMESTAMP em Sinalizadores 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 de CPU |
Flags
Esse membro indica o tipo de estrutura WNODE_XXX que contém a estrutura WNODE_HEADER:
WNODE_FLAG_ALL_DATA
O restante de uma estrutura 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 WNODE_XXX 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 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 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 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 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 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 dados WNODE_XXX sejam retornados.
Além disso, sinalizadores 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 só será válido 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 só será válido 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 as alterações no número ou nos 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
Os dados WNODE_XXX a serem retornados não incluem 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 que ele 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_REFERENCE retornado, 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 Sinalizadores 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 uma WNODE_HEADER. O driver deve alocar memória para o WNODE_XXX e liberá-lo após o retorno de IoWMIWriteEvent . O driver pode alocar essa memória da pilha ou para 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 membro Guid 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 só será válido 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 WNODE_XXX consistem em uma matriz de estruturas 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.
Comentários
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) |