Condividi tramite


WMI_SET_DATABLOCK_CALLBACK funzione di callback (wmilib.h)

La routine DpWmiSetDataBlock modifica tutti gli elementi di dati in una singola istanza di un blocco di dati. Questa routine è facoltativa.

Sintassi

WMI_SET_DATABLOCK_CALLBACK WmiSetDatablockCallback;

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

Parametri

[in] DeviceObject

Puntatore alla struttura DEVICE_OBJECT WDM del driver.

[in] Irp

Puntatore all'IRP.

[in] GuidIndex

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

[in] InstanceIndex

Se il blocco specificato da GuidIndex dispone di più istanze, InstanceIndex specifica l'istanza.

[in] BufferSize

Specifica le dimensioni in byte del buffer in buffer.

[in] Buffer

Puntatore a un buffer che contiene nuovi valori per l'istanza di .

Valore restituito

DpWmiSetDataBlock restituisce STATUS_SUCCESS o uno stato di errore appropriato, ad esempio:

Se il driver non può completare immediatamente la richiesta, può restituire STATUS_PENDING.

Osservazioni

WMI chiama routine DpWmiSetDataBlock di un driver dopo che il driver chiama WmiSystemControl in risposta a una richiesta di IRP_MN_CHANGE_SINGLE_INSTANCE.

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 di WMIREG_FLAG_REMOVE_GUID in un WMIGUIDREGINFO struttura contenuta in una struttura WMILIB_CONTEXT, è possibile che una richiesta impostata arrivi 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 buffer e BufferSize descrivere un blocco di dati di dimensioni valide, incluse eventuali spaziatura interna tra gli elementi di dati e che il contenuto del buffer sia valido per il blocco di dati.
  • Verificare che il blocco di dati specificato sia uno per il quale il driver consente modifiche avviate dal chiamante. In altre parole, il driver non deve consentire modifiche ai blocchi di dati che devono essere di sola lettura.
Non presupporre che il contesto del thread sia quello dell'applicazione in modalità utente, un driver di livello superiore potrebbe averlo modificato.

Se un driver implementa una routine DpWmiSetDataBlock, il driver deve inserire l'indirizzo della routine nel SetWmiDataBlock membro della struttura WMILIB_CONTEXT che passa a WmiSystemControl. Se un driver non implementa una routine DpWmiSetDataBlock, deve impostare SetWmiDataBlock su NULL. In quest'ultimo caso, WMI restituisce STATUS_READ_ONLY al chiamante.

Questa routine può essere visualizzabile a pagina.

Per altre informazioni sull'implementazione di questa routine, vedere Calling WmiSystemControl to Handle WMI IRPs.

Fabbisogno

Requisito Valore
piattaforma di destinazione Desktop
intestazione wmilib.h (include Wmilib.h)
IRQL Chiamato in PASSIVE_LEVEL.

Vedere anche

IRP_MN_CHANGE_SINGLE_INSTANCE

WMILIB_CONTEXT

WmiSystemControl