Функция WmiSystemControl (wmilib.h)
Подпрограмма WmiSystemControl — это подпрограмма диспетчеризации для драйверов, использующих подпрограммы поддержки библиотекИ WMI для обработки WMI IRP.
Синтаксис
NTSTATUS WmiSystemControl(
[in] PWMILIB_CONTEXT WmiLibInfo,
[in] PDEVICE_OBJECT DeviceObject,
[in, out] PIRP Irp,
[out] PSYSCTL_IRP_DISPOSITION IrpDisposition
);
Параметры
[in] WmiLibInfo
Указатель на структуру WMILIB_CONTEXT , которая содержит сведения о регистрации блоков данных драйвера и блоков событий и определяет точки входа для процедур обратного вызова библиотеки WMI драйвера.
[in] DeviceObject
Указатель на DEVICE_OBJECT драйвера.
[in, out] Irp
Указатель на IRP.
[out] IrpDisposition
Указатель на значение перечисления типа SYSCTL_IRP_DISPOSITION , указывающее способ обработки IRP. WmiSystemControl всегда задает это значение, даже если он возвращает код NTSTATUS, отличный от успешного выполнения.
SYSCTL_IRP_DISPOSITION является перечислением в Wmilib.h и содержит следующие значения:
IrpProcessed
IRP был обработан и, возможно, завершен. Если подпрограмма DpWmiXxx драйвера, вызываемая WmiSystemControl , не завершила IRP, драйвер должен вызвать WmiCompleteRequest , чтобы завершить IRP после возврата WmiSystemControl .
IrpNotCompleted
IRP был обработан, но не завершен из-за того, что WMI обнаружил ошибку и настроил IRP с соответствующим кодом ошибки либо обработал запрос IRP_MN_REGINFO или IRP_MN_REGINFO_EX . Драйвер должен завершить IRP, вызвав IoCompleteRequest.
IrpNotWmi
IRP не является запросом WMI (то есть WMI не распознает дополнительный код IRP). Если драйвер обрабатывает запросы IRP_MJ_SYSTEM_CONTROL с помощью этого IRP_MN_XXX, он должен обрабатывать IRP; В противном случае драйвер должен перенаправить IRP в следующий драйвер ниже. Если драйвер является драйвером самого низкого уровня, он должен завершить IRP.
IrpForward
IRP предназначен для другого объекта устройства (то есть указатель объекта устройства на Parameters.WMI.ProviderId в IRP не соответствует указателю, переданного драйвером при вызове IoWMIRegistrationControl). Драйвер должен перенаправить IRP на следующий драйвер ниже. Если драйвер является драйвером самого низкого уровня, он должен завершить IRP.
Возвращаемое значение
WmiSystemControl возвращает STATUS_SUCCESS или один из следующих кодов ошибок:
Комментарии
Когда драйвер получает запрос IRP_MJ_SYSTEM_CONTROL с дополнительным кодом WMI IRP, он вызывает WmiSystemControl с указателем на структуру WMILIB_CONTEXT драйвера, указателем на объект устройства и указателем на IRP. Структура WMILIB_CONTEXT содержит сведения о регистрации блоков данных драйвера и блоков событий, а также определяет точки входа для процедур обратного вызова библиотеки WMI.
WmiSystemControl подтверждает, что IRP является запросом WMI, и определяет, является ли блок, указанный в запросе, допустимым для драйвера. Если это так, он обрабатывает IRP, вызывая соответствующую точку входа DpWmiXxx в структуре WMILIB_CONTEXT драйвера. WMI выполняется на PASSIVE_LEVEL IRQL при вызове процедуры DpWmiXxx драйвера.
Драйвер должен работать в PASSIVE_LEVEL IRQL, когда он перенаправит запрос IRP_MJ_SYSTEM_CONTROL в следующий драйвер ниже.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Доступно в Windows 2000 и более поздних версиях Windows. |
Целевая платформа | Универсальное |
Верхняя часть | wmilib.h (включая Wmilib.h) |
Библиотека | Wmilib.lib |
IRQL | PASSIVE_LEVEL (см. раздел "Примечания") |
Правила соответствия DDI | WmiComplete(wdm) |