Condividi tramite


WMI_SET_DATABLOCK_CALLBACK funzione di callback (wmilib.h)

La routine DpWmiSetDataBlock modifica tutti gli elementi 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 WDM del driver DEVICE_OBJECT.

[in] Irp

Puntatore all'IRP.

[in] GuidIndex

Specifica il blocco di dati in base al relativo indice 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 ha più istanze, InstanceIndex specifica l'istanza.

[in] BufferSize

Specifica le dimensioni in byte del buffer in Buffer.

[in] Buffer

Puntatore a un buffer contenente nuovi valori per l'istanza.

Valore restituito

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

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

Commenti

WMI chiama la 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 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 Buffer e BufferSize descrivono un blocco di dati di dimensioni valide, tra cui qualsiasi spaziatura interna presente tra gli elementi dati e che il contenuto del buffer sia valido per il blocco di dati.
  • Verificare che il blocco di dati specificato sia uno per cui il driver consente modifiche avviate dal chiamante. In altre parole, il driver non deve consentire modifiche ai blocchi 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.

Se un driver implementa una routine DpWmiSetDataBlock , il driver deve inserire l'indirizzo della routine nel membro SetWmiDataBlock 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 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_INSTANCE

WMILIB_CONTEXT

WmiSystemControl