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.
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. |