WMI_SET_DATAITEM_CALLBACK funzione di callback (wmilib.h)

La routine DpWmiSetDataItem modifica un singolo elemento di dati in un'istanza di un blocco di dati. Questa routine è facoltativa.

Sintassi

WMI_SET_DATAITEM_CALLBACK WmiSetDataitemCallback;

NTSTATUS WmiSetDataitemCallback(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PIRP Irp,
  [in] ULONG GuidIndex,
  [in] ULONG InstanceIndex,
  [in] ULONG DataItemId,
  [in] ULONG BufferSize,
  [in] PUCHAR Buffer
)
{...}

Parametri

[in] DeviceObject

Puntatore alla struttura WDM del driver DEVICE_OBJECT.

[in] Irp

Puntatore all'IRP.

[in] GuidIndex

Specifica il blocco di dati specificando un indice in base zero nell'elenco di GUID forniti dal driver nella struttura WMILIB_CONTEXT passata a WmiSystemControl.

[in] InstanceIndex

Se il blocco specificato da GuidIndex include più istanze, InstanceIndex è un valore in base zero che specifica l'istanza.

[in] DataItemId

Specifica l'ID dell'elemento di dati da impostare.

[in] BufferSize

Specifica le dimensioni in byte del buffer in Buffer.

[in] Buffer

Puntatore a un buffer contenente il nuovo valore per l'elemento di dati.

Valore restituito

DpWmiSetDataItem restituisce STATUS_SUCCESS o un codice di errore appropriato, ad esempio quanto segue:

Commenti

WMI chiama la routine DpWmiSetDataItem di un driver dopo che il driver chiama WmiSystemControl in risposta a una richiesta di IRP_MN_CHANGE_SINGLE_ITEM .

Non implementare DpWmiSetDataItem a meno che non si sia certi che un componente in modalità utente fornito dal sistema richieda questa funzionalità. Se si implementa una routine DpWmiSetDataItem , il driver deve inserire l'indirizzo della routine nel membro SetWmiDataItem della struttura WMILIB_CONTEXT che passa a WmiSystemControl. Se non si implementa una routine DpWmiSetDataItem , il driver deve impostare SetWmiDataItem su NULL. In quest'ultimo caso, WMI restituisce STATUS_READ_ONLY al chiamante.

Il driver è responsabile della convalida di tutti gli argomenti di input. In particolare, il driver deve eseguire le operazioni seguenti:

  • Verificare che il valore GuidIndex sia compreso tra zero e GuidCount-1, in base al membro GuidCount della struttura WMILIB_CONTEXT .
  • Verificare che il driver non abbia contrassegnato il blocco di dati specificato per la rimozione. Se il driver ha specificato di recente il flag WMIREG_FLAG_REMOVE_GUID in una struttura WMIGUIDREGINFO contenuta in una struttura WMILIB_CONTEXT , è possibile che una richiesta impostata venga visualizzata prima che si verifichi la rimozione.
  • Verificare che il valore InstanceIndex sia compreso nell'intervallo di indici di istanza supportati dal driver per il blocco di dati.
  • Verificare che il valore DataItemId sia compreso nell'intervallo di identificatori dell'elemento di dati supportati dal driver per il blocco di dati.
  • Verificare che Buffer e BufferSize descrivono un elemento dati di dimensioni valide e che il contenuto del buffer sia valido per l'elemento dati.
  • Verificare che l'elemento di dati specificato sia uno per cui il driver consente modifiche avviate dal chiamante. In altre parole, il driver non deve consentire modifiche agli elementi di dati che si intende essere di sola lettura.
Non presupporre che il contesto del thread sia quello dell'applicazione in modalità utente che avvia, un driver di livello superiore potrebbe essere stato modificato.

Questa routine può essere paginabile.

Per altre informazioni sull'implementazione di questa routine, vedere Chiamata di WmiSystemControl per gestire i provider di accesso WMI.

Requisiti

Requisito Valore
Piattaforma di destinazione Desktop
Intestazione wmilib.h (includere Wmilib.h)
IRQL Chiamato in PASSIVE_LEVEL.

Vedi anche

IRP_MN_CHANGE_SINGLE_ITEM

WMILIB_CONTEXT

WmiSystemControl