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