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


IRP_MN_ENABLE_COLLECTION

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

Если драйвер вызывает WmiSystemControl для обработки запроса IRP_MN_ENABLE_COLLECTION , WMI, в свою очередь, вызывает подпрограмму DpWmiFunctionControl этого драйвера.

Основной код

IRP_MJ_SYSTEM_CONTROL

При отправке

WMI отправляет этот IRP, чтобы запросить у драйвера начало накопления данных для блока данных, который драйвер зарегистрировал как дорогостоящий для сбора.

WMI отправляет этот IRP в IRQL = PASSIVE_LEVEL в произвольном контексте потока.

Входные параметры

Parameters.WMI.ProviderId указывает на объект устройства драйвера, который должен отвечать на запрос. Этот указатель находится в расположении стека ввода-вывода драйвера в IRP.

Parameters.WMI.DataPath указывает на GUID, который идентифицирует блок данных, для которого накапливаются данные.

Выходные параметры

Нет.

Блок состояния ввода-вывода

Если драйвер обрабатывает IRP путем вызова WmiSystemControl, WMI задает Irp-IoStatus.Status и Irp-IoStatus.Information в блоке состояния ввода-вывода>>.

В противном случае драйвер устанавливает для Irp-IoStatus.Status> значение STATUS_SUCCESS или соответствующее состояние ошибки, например следующее:

STATUS_WMI_GUID_NOT_FOUND

STATUS_INVALID_DEVICE_REQUEST

При успешном выполнении драйвер устанавливает значение Irp-IoStatus.Information> равным нулю.

Операция

Драйвер регистрирует блок данных как дорогостоящий для сбора, задавая WMIREG_FLAG_EXPENSIVE в элементе Flags структуры WMIREGGUID или WMIGUIDREGINFO . Драйвер передает эти структуры в WMI при регистрации или обновлении блока данных. Драйверу не нужно накапливать данные для такого блока, пока он не получит явный запрос на начало сбора данных.

Драйвер может обрабатывать WMI IRP путем вызова WmiSystemControl или путем обработки самого IRP, как описано в разделе Обработка запросов WMI.

Если драйвер обрабатывает WMI IRP путем вызова WmiSystemControl, эта подпрограмма вызывает подпрограмму DpWmiFunctionControl драйвера или возвращает STATUS_SUCCESS, если драйвер не определяет подпрограмму.

Если драйвер сам обрабатывает запрос IRP_MN_ENABLE_COLLECTION , он должен делать это только в том случае, если Parameters.WMI.ProviderId указывает на тот же объект устройства, что и указатель, переданный драйвером в IoWMIRegistrationControl. В противном случае драйвер должен перенаправить запрос следующему драйверу ниже.

Перед обработкой запроса драйвер должен убедиться, что Parameters.WMI.DataPath указывает на GUID, поддерживаемый драйвером. Если это не так, драйвер должен отказаться от IRP и вернуть STATUS_WMI_GUID_NOT_FOUND. Если блок данных действителен, но не был зарегистрирован в WMIREG_FLAG_EXPENSIVE, драйвер может вернуть STATUS_SUCCESS и не предпринимать никаких дальнейших действий.

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

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

Требования

Заголовок

Wdm.h (включая Wdm.h, Ntddk.h или Ntifs.h)

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

DpWmiFunctionControl

IoWMIRegistrationControl

IRP_MN_DISABLE_COLLECTION

WMILIB_CONTEXT

WMIREGGUID

WmiSystemControl