IRP_MN_DISABLE_COLLECTION
Любой драйвер WMI, который регистрирует один или несколько своих блоков данных как ресурсоемкие для сбора, должен обрабатывать этот IRP. Драйвер может обрабатывать WMI IRP путем вызова WmiSystemControl или путем обработки самого IRP, как описано в разделе Обработка запросов WMI.
Если драйвер вызывает WmiSystemControl для обработки запроса IRP_MN_DISABLE_COLLECTION , WMI, в свою очередь, вызывает подпрограмму DpWmiFunctionControl этого драйвера.
Основной код
При отправке
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, эта подпрограмма вызывает подпрограмму DpWmiFunctionControl драйвера или возвращает STATUS_SUCCESS, если драйвер не определяет подпрограмму.
Если драйвер сам обрабатывает запрос IRP_MN_DISABLE_COLLECTION , он должен делать это только в том случае, если Parameters.WMI.ProviderId указывает на тот же объект устройства, что и указатель, переданный драйвером в IoWMIRegistrationControl. В противном случае драйвер должен перенаправить запрос следующему драйверу ниже.
Перед обработкой запроса драйвер должен определить, указывает ли Parameters.WMI.DataPath на GUID, поддерживаемый драйвером. В противном случае драйвер должен сбой IRP и возвратить STATUS_WMI_GUID_NOT_FOUND. Если блок данных действителен, но не был зарегистрирован в WMIREG_FLAG_EXPENSIVE, драйвер может вернуть STATUS_SUCCESS и не предпринимать никаких дальнейших действий.
Драйверу не нужно проверка, отключен ли сбор данных, так как WMI отправляет один запрос на отключение для блока данных, когда последний потребитель данных отключает сбор для этого блока. WMI не отправляет другой запрос на отключение без промежуточного запроса для включения.
Требования
Заголовок |
Wdm.h (включая Wdm.h, Ntddk.h или Ntifs.h) |