Função WmiSystemControl (wmilib.h)

A rotina WmiSystemControl é uma rotina de expedição para drivers que usam rotinas de suporte da biblioteca WMI para lidar com IRPs WMI.

Sintaxe

NTSTATUS WmiSystemControl(
  [in]      PWMILIB_CONTEXT         WmiLibInfo,
  [in]      PDEVICE_OBJECT          DeviceObject,
  [in, out] PIRP                    Irp,
  [out]     PSYSCTL_IRP_DISPOSITION IrpDisposition
);

Parâmetros

[in] WmiLibInfo

Um ponteiro para uma estrutura WMILIB_CONTEXT que contém informações de registro para blocos de dados e blocos de eventos de um driver e define pontos de entrada para as rotinas de retorno de chamada da biblioteca WMI do driver.

[in] DeviceObject

Um ponteiro para o DEVICE_OBJECT do driver.

[in, out] Irp

Um ponteiro para o IRP.

[out] IrpDisposition

Um ponteiro para um valor de enumeração do tipo SYSCTL_IRP_DISPOSITION que indica como o IRP foi tratado. WmiSystemControl sempre define esse valor, mesmo quando retorna um código NTSTATUS sem êxito.

SYSCTL_IRP_DISPOSITION é uma enumeração em Wmilib.h e contém os seguintes valores:

IrpProcessed

O IRP foi processado e possivelmente concluído. Se a rotina DpWmiXxx do driver chamada por WmiSystemControl não tiver concluído o IRP, o driver deverá chamar WmiCompleteRequest para concluir o IRP depois que WmiSystemControl retornar.

IrpNotCompleted

O IRP foi processado, mas não concluído, porque o WMI detectou um erro e configurou o IRP com um código de erro apropriado ou processou uma solicitação de IRP_MN_REGINFO ou IRP_MN_REGINFO_EX . O driver deve concluir o IRP chamando IoCompleteRequest.

IrpNotWmi

O IRP não é uma solicitação WMI (ou seja, o WMI não reconhece o código secundário do IRP). Se o driver manipular solicitações IRP_MJ_SYSTEM_CONTROL com esse IRP_MN_XXX, ele deverá manipular o IRP; caso contrário, o driver deve encaminhar o IRP para o próximo driver inferior. Se o driver for o driver de nível mais baixo, ele deverá concluir o IRP.

IrpForward

O IRP é direcionado a outro objeto de dispositivo (ou seja, o ponteiro do objeto do dispositivo em Parameters.WMI.ProviderId no IRP não corresponde ao ponteiro passado pelo driver em sua chamada para IoWMIRegistrationControl). O driver deve encaminhar o IRP para o próximo driver inferior. Se o driver for o driver de nível mais baixo, ele deverá concluir o IRP.

Retornar valor

WmiSystemControl retorna STATUS_SUCCESS ou um dos seguintes códigos de erro:

Comentários

Quando um driver recebe uma solicitação IRP_MJ_SYSTEM_CONTROL com um código secundário WMI IRP, ele chama WmiSystemControl com um ponteiro para a estrutura de WMILIB_CONTEXT do driver, um ponteiro para seu objeto de dispositivo e um ponteiro para o IRP. A estrutura WMILIB_CONTEXT contém informações de registro para blocos de dados e blocos de eventos do driver e define pontos de entrada para suas rotinas de retorno de chamada da biblioteca WMI.

WmiSystemControl confirma que o IRP é uma solicitação WMI e determina se o bloco especificado pela solicitação é válido para o driver. Nesse caso, ele processa o IRP chamando o ponto de entrada DpWmiXxx apropriado na estrutura de WMILIB_CONTEXT do driver. O WMI está em execução no IRQL PASSIVE_LEVEL quando chama a rotina DpWmiXxx do driver.

Um driver deve estar em execução no IRQL PASSIVE_LEVEL quando encaminha uma solicitação de IRP_MJ_SYSTEM_CONTROL para o driver inferior seguinte.

Requisitos

Requisito Valor
Cliente mínimo com suporte Disponível no Windows 2000 e versões posteriores do Windows.
Plataforma de Destino Universal
Cabeçalho wmilib.h (inclua Wmilib.h)
Biblioteca Wmilib.lib
IRQL PASSIVE_LEVEL (consulte a seção Comentários)
Regras de conformidade da DDI WmiComplete(wdm)

Confira também

DpWmiExecuteMethod

DpWmiFunctionControl

DpWmiQueryDataBlock

DpWmiQueryReginfo

DpWmiSetDataBlock

DpWmiSetDataItem

IRP_MJ_SYSTEM_CONTROL

IRP_MN_REGINFO_EX

IoCompleteRequest

WMILIB_CONTEXT