共用方式為


WMI_SET_DATAITEM_CALLBACK回呼函式 (wmilib.h)

DpWmiSetDataItem 例程會變更數據區塊實例中的單一數據項。 此例程是選擇性的。

語法

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
)
{...}

參數

[in] DeviceObject

驅動程式的 WDM DEVICE_OBJECT 結構的指標。

[in] Irp

IRP 的指標。

[in] GuidIndex

藉由將以零起始的索引提供給驅動程式在傳遞至 WmiSystemControl WMILIB_CONTEXT 結構中提供的 GUID 清單,指定數據區塊。

[in] InstanceIndex

如果 GuidIndex 所指定的區塊 有多個實例,InstanceIndex 是指定實例的以零起始的值。

[in] DataItemId

指定要設定之數據項的識別碼。

[in] BufferSize

指定緩衝區的大小,以位元組為單位,Buffer

[in] Buffer

緩衝區的指標,其中包含數據項的新值。

傳回值

DpWmiSetDataItem 會傳回STATUS_SUCCESS或適當的錯誤碼,如下所示:

言論

WMI 會在驅動程式呼叫 WmiSystemControl 回應 IRP_MN_CHANGE_SINGLE_ITEM 要求之後,呼叫驅動程式的 DpWmiSetDataItem 例程。

除非您確定系統提供的使用者模式元件需要這項功能,否則請勿 實作 dpWmiSetDataItem。 如果您實作 DpWmiSetDataItem 例程,驅動程式必須將例程的位址放在 SetWmiDataItemWMILIB_CONTEXT 結構的成員,而該結構會傳遞至 WmiSystemControl 。 如果您未實作 DpWmiSetDataItem 例程,驅動程式必須將 setWmiDataItem setWmiDataItem 設定為 NULL。 在後者的情況下,WMI 會將STATUS_READ_ONLY傳回給呼叫端。

驅動程式負責驗證所有輸入自變數。 具體而言,驅動程式必須執行下列動作:

  • 根據 WMILIB_CONTEXT 結構的 GuidCount 成員,確認 GuidIndex 值介於零和 GuidCount-1 之間。
  • 確認驅動程式尚未標示要移除的指定數據區塊。 如果驅動程式最近在 WMIGUIDREGINFO 中指定了WMIREG_FLAG_REMOVE_GUID旗標, 結構 WMILIB_CONTEXT 中包含的結構,則在移除發生之前,可能會有設定要求到達。
  • 確認 InstanceIndex 值位於數據區塊驅動程式支援的實例索引範圍內。
  • 確認 DataItemId 值位於數據區塊驅動程式所支持的數據項標識符範圍內。
  • 確認 BufferBufferSize 描述有效大小的數據項,而且緩衝區的內容對數據項有效。
  • 確認指定的數據項是驅動程式允許呼叫端起始的修改之一。 換句話說,驅動程式不應該允許修改您打算只讀的數據項。
請勿假設線程內容是起始使用者模式應用程式的線程內容,較高層級的驅動程式可能會變更它。

這個例程可以分頁。

如需實作此例程的詳細資訊,請參閱 呼叫 WmiSystemControl 來處理 WMI IRP

要求

要求 價值
目標平臺 桌面
標頭 wmilib.h (包括 Wmilib.h)
IRQL 在 PASSIVE_LEVEL呼叫。

另請參閱

IRP_MN_CHANGE_SINGLE_ITEM

WMILIB_CONTEXT

WmiSystemControl