struttura WNODE_HEADER (wmistr.h)

La struttura WNODE_HEADER è il primo membro di tutte le altre strutture WNODE_XXX . Contiene informazioni comuni a tutte queste strutture.

Sintassi

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;

Members

BufferSize

Questo membro specifica le dimensioni, in byte, del buffer non di paging per ricevere i dati WNODE_XXX da restituire, inclusa questa struttura WNODE_HEADER , membri aggiuntivi di una struttura WNODE_XXX del tipo indicato da Flags e qualsiasi dato determinato dal driver o WMI che accompagna tale struttura.

ProviderId

Se Flags è impostato su WNODE_FLAG_EVENT_ITEM o WNODE_FLAG_EVENT_REFERENCE, ProviderId deve contenere l'ID del provider WMI associato all'oggetto dispositivo. È possibile ottenere il valore ProviderId chiamando IoWMIDeviceObjectToProviderId. Se Flags è impostato su qualsiasi altro valore, questo membro è riservato.

DUMMYUNIONNAME

DUMMYUNIONNAME.HistoricalContext

Questo membro archivia l'handle alla sessione di traccia eventi.

DUMMYUNIONNAME.DUMMYSTRUCTNAME

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Version

Questo membro è riservato a WMI.

DUMMYUNIONNAME.DUMMYSTRUCTNAME.Linkage

Questo membro è riservato a WMI.

DUMMYUNIONNAME2

DUMMYUNIONNAME2.CountLost

Riservato

DUMMYUNIONNAME2.KernelHandle

Questo membro è riservato a WMI.

DUMMYUNIONNAME2.TimeStamp

Questo membro indica l'ora in cui un driver ha raccolto i dati WNODE_XXX . Questo valore di ora è espresso in formato ora di sistema assoluto. L'ora di sistema assoluta è il numero di intervalli di 100 nanosecondi dall'inizio dell'anno 1601 nel calendario gregoriano. Un driver può chiamare KeQuerySystemTime per ottenere questo valore. Se il blocco deve essere scritto in un file di log (WNODE_FLAG_LOG_WNODE), un driver NT potrebbe anche impostare WNODE_FLAG_USE_TIMESTAMP in Flag per richiedere che il logger di sistema lasci invariato il valore di TimeStamp .

Guid

Questo membro indica il GUID che rappresenta il blocco di dati associato al WNODE_XXX da restituire.

ClientContext

Questo membro archivia il tipo di orologio per la sessione. I valori possibili sono inclusi nella tabella seguente.

Valore Descrizione
1 Valore del contatore delle prestazioni (detto anche QPC, QueryPerformanceCounter o PerfCounter)
2 Timer di sistema
3 Ciclo cpu

Flags

Questo membro indica il tipo di struttura WNODE_XXX che contiene la struttura WNODE_HEADER:

WNODE_FLAG_ALL_DATA

Il resto di una struttura WNODE_ALL_DATA segue la struttura WNODE_HEADER nel buffer.

WMI imposta questo flag nella struttura WNODE_HEADER che passa con una richiesta di IRP_MN_QUERY_ALL_DATA .

Un driver imposta questo flag nella struttura WNODE_HEADER di un evento costituito da tutte le istanze di un blocco di dati. Se le dimensioni del blocco di dati sono identiche per tutte le istanze, anche un driver imposta WNODE_FLAG_FIXED_INSTANCE_SIZE.

WNODE_FLAG_EVENT_ITEM

Un driver imposta questo flag per indicare che la struttura WNODE_XXX è stata generata come evento. Questo flag è valido solo se è impostato anche WNODE_FLAG_ALL_DATA, WNODE_FLAG_SINGLE_INSTANCE o WNODE_FLAG_SINGLE_ITEM.

WNODE_FLAG_EVENT_REFERENCE

Il resto di una struttura WNODE_EVENT_REFERENCE segue la struttura WNODE_HEADER nel buffer.

Un driver imposta questo flag quando genera un evento maggiore della dimensione massima specificata nel Registro di sistema per un evento. WMI usa le informazioni nella struttura WNODE_EVENT_REFERENCE per richiedere i dati dell'evento e pianifica tale richiesta in base al valore di WNODE_FLAG_SEVERITY_MASK.

WNODE_FLAG_METHOD_ITEM

Il resto di una struttura WNODE_METHOD_ITEM segue la struttura WNODE_HEADER nel buffer.

WMI imposta questo flag nella struttura WNODE_HEADER che passa con una richiesta di IRP_MN_EXECUTE_METHOD .

WNODE_FLAG_SINGLE_INSTANCE

Il resto di una struttura WNODE_SINGLE_INSTANCE segue la struttura WNODE_HEADER nel buffer.

WMI imposta questo flag nella struttura WNODE_HEADER che passa con una richiesta per eseguire una query o modificare un'istanza.

Un driver imposta questo flag nella struttura WNODE_HEADER di un evento costituito da una singola istanza di un blocco di dati.

WNODE_FLAG_SINGLE_ITEM

Il resto di una struttura WNODE_SINGLE_INSTANCE segue la struttura WNODE_HEADER nel buffer.

WMI imposta questo flag nella struttura WNODE_HEADER che passa con una richiesta di modifica di un elemento.

Un driver imposta questo flag nella struttura WNODE_HEADER di un evento costituito da un singolo elemento di dati.

WNODE_FLAG_TOO_SMALL

Il resto di una struttura WNODE_TOO_SMALL segue la struttura WNODE_HEADER nel buffer.

Un driver imposta questo flag quando passa una struttura WNODE_TOO_SMALL , a indicare che il buffer è troppo piccolo per tutti i dati WNODE_XXX da restituire.

Inoltre, i flag possono essere impostati con uno o più dei flag seguenti che forniscono informazioni aggiuntive sul WNODE_XXX:

WNODE_FLAG_FIXED_INSTANCE_SIZE

Tutte le istanze di un blocco di dati hanno le stesse dimensioni. Questo flag è valido solo se è impostato anche WNODE_FLAG_ALL_DATA.

WNODE_FLAG_INSTANCES_SAME

Il numero di istanze e i nomi delle istanze dinamiche in una struttura WNODE_ALL_DATA da restituire sono identici a quelli restituiti dalla query WNODE_ALL_DATA precedente. Questo flag è valido solo se è impostato anche WNODE_FLAG_ALL_DATA. Questo flag viene ignorato per i blocchi di dati registrati con nomi di istanza statici.

Per le prestazioni ottimizzate, un driver deve impostare questo flag se può tenere traccia delle modifiche apportate al numero o ai nomi dei blocchi di dati. WMI può quindi ignorare l'elaborazione necessaria per rilevare e aggiornare i nomi delle istanze dinamiche.

WNODE_FLAG_STATIC_INSTANCE_NAMES

I dati WNODE_XXX da restituire non includono nomi di istanza.

WMI imposta questo flag prima di richiedere dati WNODE_XXX per i blocchi di dati registrati con nomi di istanza statici. Dopo aver ricevuto il WNODE_XXX restituito dal driver, WMI compila i nomi di istanza statici specificati durante la registrazione prima di passare il WNODE_XXX restituito a un consumer di dati.

WNODE_FLAG_PDO_INSTANCE_NAMES

I nomi di istanza statici sono basati sull'ID istanza del dispositivo del PDO per il dispositivo. Un driver richiede tali nomi impostando WMIREG_FLAG_INSTANCE_PDO in WMIREGGUID che usa per registrare il blocco.

WMI imposta questo flag prima di richiedere dati WNODE_XXX per i blocchi di dati registrati con nomi di istanza basati su PDO.

WNODE_FLAG_SEVERITY_MASK

Livello di gravità determinato dal driver dell'evento associato a un WNODE_EVENT_REFERENCE restituito, con 0x00 che indica il livello meno grave e 0xff che indica il livello più grave.

WMI usa il valore di questo flag per classificare in ordine di priorità le richieste per i dati dell'evento.

WNODE_FLAG_USE_TIMESTAMP

Il logger di sistema non deve modificare il valore di TimeStamp impostato dal driver.

Un driver NT può anche impostare Flag su uno o più dei valori seguenti per i blocchi eventi da scrivere in un file di log di sistema:

WNODE_FLAG_LOG_WNODE

Un blocco di eventi deve essere inviato al logger di sistema. L'intestazione dell'evento è una struttura di WNODE_HEADER standard. Se il driver cancella WNODE_FLAG_TRACED_GUID, il blocco verrà inviato anche a WMI per il recapito a tutti i consumer di dati che hanno abilitato l'evento. Il driver deve allocare il WNODE_XXX dalla memoria del pool. WMI libera la memoria dopo il recapito dell'evento ai consumer di dati.

WNODE_FLAG_TRACED_GUID

Un blocco di eventi deve essere inviato solo al logger di sistema. Non viene inviato ai consumer di dati WMI. L'intestazione dell'evento è una struttura EVENT_TRACE_HEADER , dichiarata in Evntrace.h, anziché un WNODE_HEADER. Il driver deve allocare memoria per il WNODE_XXX e liberarlo dopo la restituzione di IoWMIWriteEvent . Il driver può allocare tale memoria dallo stack o, per ridurre al minimo l'overhead di allocazione e liberare la memoria, dalla risorsa di archiviazione locale del thread del driver se il driver crea e gestisce il proprio pool di thread.

WNODE_FLAG_USE_GUID_PTR

Il membro Guid punta a un GUID in memoria, anziché contenere il GUID stesso. Il logger di sistema dereferenzia il puntatore prima di passare i dati al consumer. Questo flag è valido solo se sono impostati anche WNODE_FLAG_LOG_WNODE o WNODE_FLAG_TRACED_GUID.

WNODE_FLAG_USE_MOF_PTR

I dati che seguono i membri fissi di una struttura WNODE_XXX sono costituiti da una matrice di strutture MOF_FIELD, definite in Evntrace.h, che contengono puntatori a dati e dimensioni anziché ai dati stessi. La matrice può contenere fino a MAX_MOF_FIELD elementi. Il logger di sistema dereferenzia i puntatori prima di passare i dati al consumer Questo flag è valido solo per i blocchi registrati con WMIREG_FLAG_TRACED_GUID.

Commenti

In una richiesta IRP_MN_CHANGE_XXX o IRP_MN_EXECUTE_METHOD, BufferSize in IRP indica le dimensioni massime in byte del buffer di output, mentre BufferSizenell'input WNODE_HEADER per tale richiesta indica le dimensioni, in byte, dei dati di input nel buffer.

Requisiti

Requisito Valore
Intestazione wmistr.h (include Wmistr.h)

Vedi anche

IoWMIDeviceObjectToProviderId

IoWMIWriteEvent

KeQuerySystemTime

WNODE_ALL_DATA

WNODE_EVENT_ITEM

WNODE_EVENT_REFERENCE

WNODE_METHOD_ITEM

WNODE_SINGLE_INSTANCE

WNODE_SINGLE_ITEM

WNODE_TOO_SMALL