Поделиться через


функция обратного вызова WMI_FUNCTION_CONTROL_CALLBACK (wmilib.h)

Программа DpWmiFunctionControl включает или отключает уведомление о событиях и включает или отключает сбор данных для блоков данных, зарегистрированных драйвером как дорогостоящий для сбора. Эта подпрограмма является необязательной.

Синтаксис

WMI_FUNCTION_CONTROL_CALLBACK WmiFunctionControlCallback;

NTSTATUS WmiFunctionControlCallback(
  [in] PDEVICE_OBJECT DeviceObject,
  [in] PIRP Irp,
  [in] ULONG GuidIndex,
  [in] WMIENABLEDISABLECONTROL Function,
  [in] BOOLEAN Enable
)
{...}

Параметры

[in] DeviceObject

Указатель на структуру WDM драйвера DEVICE_OBJECT.

[in] Irp

Указатель на IRP.

[in] GuidIndex

Задает блок данных путем предоставления отсчитываемого от нуля индекса в список идентификаторов GUID, предоставленных драйвером в структуре WMILIB_CONTEXT, переданной в WmiSystemControl.

[in] Function

Указывает, что нужно включить или отключить. WmiEventControl указывает на событие, а WmiDataBlockControl указывает сбор данных для блока, зарегистрированного как дорогостоящий для сбора (т. е. блок, для которого установлен драйвер WMIREG_FLAG_EXPENSIVE в флагах флагов структуры WMIGUIDREGINFO, используемой для регистрации блока).

[in] Enable

Указывает TRUE для включения события или сбора данных или FALSE для отключения.

Возвращаемое значение

DpWmiFunctionControl возвращает STATUS_SUCCESS или соответствующее состояние ошибки, например:

Замечания

WMI вызывает драйвера dpWmiFunctionControl после вызова драйвера WmiSystemControl в ответ на один из следующих запросов:

IRP_MN_ENABLE_COLLECTION

IRP_MN_DISABLE_COLLECTION

IRP_MN_ENABLE_EVENTS

IRP_MN_DISABLE_EVENTS

Если драйвер реализует подпрограмму DpWmiFunctionControl, драйвер должен поместить адрес подпрограммы в элемент WmiFunctionControl структуры WMILIB_CONTEXT, которую он передает WmiSystemControl. Если драйвер не реализует подпрограмму DpWmiFunctionControl, необходимо задать WmiFunctionControl значение NULL. В последнем случае WMI возвращает STATUS_SUCCESS вызывающей объекту.

Драйвер отвечает за проверку всех входных аргументов. В частности, драйвер должен выполнить следующие действия:

  • Убедитесь, что значение guidIndex находится в диапазоне от нуля до GuidCount-1 на основе элемента GuidCount структуры WMILIB_CONTEXT.
  • Убедитесь, что драйвер не помечает указанный блок данных для удаления. Если драйвер недавно указал флаг WMIREG_FLAG_REMOVE_GUID в структуре WMIGUIDREGINFO, содержащейся в структуре WMILIB_CONTEXT, можно получить дополнительный запрос до удаления.
Драйверу не нужно проверять, включены ли события или сбор данных для блока, так как WMI отправляет один запрос включения, когда первый потребитель данных включает блок, и отправляет один запрос отключения, когда последний потребитель данных отключает блок. WMI не будет вызывать DpWmiFunctionControl, чтобы включить блок без промежуточного вызова, чтобы отключить его.

После включения или отключения события или сбора данных для блока драйвер вызывает WmiCompleteRequest, чтобы завершить запрос.

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

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

Требования

Требование Ценность
целевая платформа Настольный
заголовка wmilib.h (include Wmilib.h)
IRQL Звонил в PASSIVE_LEVEL.

См. также

IRP_MN_DISABLE_COLLECTION

IRP_MN_DISABLE_EVENTS

IRP_MN_ENABLE_COLLECTION

IRP_MN_ENABLE_EVENTS

WMILIB_CONTEXT

WmiSystemControl