WMI_SET_DATABLOCK_CALLBACK回呼函式 (wmilib.h)
DpWmiSetDataBlock 例程會變更單一數據區塊實例中的所有數據項。 此例程是選擇性的。
語法
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
)
{...}
參數
[in] DeviceObject
驅動程式的 WDM DEVICE_OBJECT 結構的指標。
[in] Irp
IRP 的指標。
[in] GuidIndex
將數據區塊以零起始的索引指定至驅動程式在傳遞至 WmiSystemControl WMILIB_CONTEXT 結構中驅動程式所提供的 GUID 清單。
[in] InstanceIndex
如果 GuidIndex 所指定的區塊 有多個實例,InstanceIndex 指定 實例。
[in] BufferSize
指定緩衝區的大小,以位元組為單位,Buffer。
[in] Buffer
緩衝區的指標,其中包含 實例的新值。
傳回值
DpWmiSetDataBlock 會傳回STATUS_SUCCESS或適當的錯誤狀態,如下所示:
如果驅動程式無法立即完成要求,它可以傳回STATUS_PENDING。
言論
WMI 會在驅動程式呼叫 WmiSystemControl 回應 IRP_MN_CHANGE_SINGLE_INSTANCE 要求之後,呼叫驅動程式的 DpWmiSetDataBlock 例程。
驅動程式負責驗證所有輸入自變數。 具體而言,驅動程式必須執行下列動作:
- 根據 WMILIB_CONTEXT 結構的 GuidCount 成員,確認 GuidIndex 值介於零和 GuidCount-1 之間。
- 確認驅動程式尚未標示要移除的指定數據區塊。 如果驅動程式最近在 WMIGUIDREGINFO 中指定了WMIREG_FLAG_REMOVE_GUID旗標, 結構 WMILIB_CONTEXT 中包含的結構,則在移除發生之前,可能會有設定要求到達。
- 確認 InstanceIndex 值位於數據區塊驅動程式支援的實例索引範圍內。
- 確認 Buffer 和 BufferSize 描述有效大小的數據區塊,包括數據項之間存在的任何填補,以及緩衝區的內容對數據區塊有效。
- 確認指定的數據區塊是驅動程式允許呼叫端起始修改的區塊。 換句話說,驅動程式不應該允許修改您想要只讀的數據區塊。
如果驅動程式實作 DpWmiSetDataBlock 例程,驅動程式必須將例程的位址放在 SetWmiDataBlockWMILIB_CONTEXT結構的成員中,而該。 如果驅動程式未實作 DpWmiSetDataBlock 例程,則必須將 setWmiDataBlock setWmiDataBlock 設定為 NULL。 在後者的情況下,WMI 會將STATUS_READ_ONLY傳回給呼叫端。
這個例程可以分頁。
如需實作此例程的詳細資訊,請參閱 呼叫 WmiSystemControl 來處理 WMI IRP。
要求
要求 | 價值 |
---|---|
目標平臺 | 桌面 |
標頭 | wmilib.h (包括 Wmilib.h) |
IRQL | 在 PASSIVE_LEVEL呼叫。 |