функция обратного вызова 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 вызывает подпрограмму DpWmiSetDataItem драйвера после того, как драйвер вызывает 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 находится в диапазоне идентификаторов элементов данных, поддерживаемых драйвером для блока данных.
  • Убедитесь, что Buffer и BufferSize описывают элемент данных допустимого размера и что содержимое буфера является допустимым для элемента данных.
  • Убедитесь, что указанный элемент данных является элементом, для которого драйвер разрешает изменения, инициированные вызывающим объектом. Другими словами, драйвер не должен разрешать изменения элементов данных, которые должны быть доступны только для чтения.
Не предполагайте, что контекст потока является контекстом инициирующего приложения пользовательского режима. Возможно, драйвер более высокого уровня изменил его.

Эта подпрограмма может быть выстраимаемой.

Дополнительные сведения о реализации этой процедуры см. в статье Вызов WmiSystemControl для обработки WMI IRP.

Требования

Требование Значение
Целевая платформа Персональный компьютер
Верхняя часть wmilib.h (включая Wmilib.h)
IRQL Вызывается на PASSIVE_LEVEL.

См. также раздел

IRP_MN_CHANGE_SINGLE_ITEM

WMILIB_CONTEXT

WmiSystemControl