функция обратного вызова 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
Задает блок данных путем предоставления отсчитываемого от нуля индекса в список идентификаторов GUID, предоставленных драйвером в структуре WMILIB_CONTEXT, переданной в WmiSystemControl.
[in] InstanceIndex
Если блок, указанный GuidIndex, содержит несколько экземпляров, InstanceIndex — это отсчитываемое от нуля значение, указывающее экземпляр.
[in] DataItemId
Указывает идентификатор заданного элемента данных.
[in] BufferSize
Задает размер буфера в байтах в буфере.
[in] Buffer
Указатель на буфер, содержащий новое значение для элемента данных.
Возвращаемое значение
DpWmiSetDataItem возвращает STATUS_SUCCESS или соответствующий код ошибки, например следующий:
Замечания
WMI вызывает подпрограмму драйвера DpWmiSetDataIte m после вызова драйвера WmiSystemControl в ответ на запрос IRP_MN_CHANGE_SINGLE_ITEM.
Не реализуйте DpWmiSetDataItem, если только вы не уверены, что для компонента пользовательского режима, предоставленного системой, требуется эта возможность. Если вы реализуете подпрограмму dpWmiSetDataItem, драйвер должен поместить адрес подпрограммы в SetWmiDataItem элемента структуры WMILIB_CONTEXT, которую он передает WmiSystemControl. Если вы не реализуете подпрограмму dpWmiSetDataItem, драйвер должен задать SetWmiDataItem значение NULL. В последнем случае WMI возвращает STATUS_READ_ONLY вызывающей объекту.
Драйвер отвечает за проверку всех входных аргументов. В частности, драйвер должен выполнить следующие действия:
- Убедитесь, что значение guidIndex находится в диапазоне от нуля до GuidCount-1 на основе элемента GuidCount структуры WMILIB_CONTEXT.
- Убедитесь, что драйвер не помечает указанный блок данных для удаления. Если драйвер недавно указал флаг WMIREG_FLAG_REMOVE_GUID в структуре WMIGUIDREGINFO, содержащейся в структуре WMILIB_CONTEXT, то перед удалением можно прибыть запрос на набор.
- Убедитесь, что значение InstanceIndex находится в диапазоне индексов экземпляров, поддерживаемых драйвером блока данных.
- Убедитесь, что значение DataItemId находится в диапазоне идентификаторов элементов данных, поддерживаемых драйвером блока данных.
- Убедитесь, что буферных и BufferSize описывать допустимый размер элемента данных и что содержимое буфера допустимо для элемента данных.
- Убедитесь, что указанный элемент данных является одним из элементов, для которых драйвер разрешает изменения, инициированные вызывающим. Другими словами, драйвер не должен разрешать изменения элементов данных, предназначенных только для чтения.
Эта подпрограмма может быть страничной.
Дополнительные сведения о реализации этой подпрограммы см. в вызове WmiSystemControl для обработкиIRP WMI.
Требования
Требование | Ценность |
---|---|
целевая платформа | Настольный |
заголовка | wmilib.h (include Wmilib.h) |
IRQL | Звонил в PASSIVE_LEVEL. |