Partilhar via


Função WmiSystemControl (wmilib.h)

A rotina de WmiSystemControl é uma rotina de expedição para drivers que usam rotinas de suporte 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 de 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_OBJECTdo 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 sucesso.

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 DpWmi do driverxxx chamada por WmiSystemControl não tiver concluído o IRP, o driver deverá chamar WmiCompleteRequest para concluir o IRP após 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 para 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.

Valor de retorno

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

Observações

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 DpWmi apropriadoponto de entrada Xxx na estrutura de WMILIB_CONTEXT do driver. O WMI está em execução no PASSIVE_LEVEL IRQL quando chama a rotina de DpWmixxx do driver.

Um driver deve estar em execução no IRQL PASSIVE_LEVEL quando encaminhar uma solicitação de IRP_MJ_SYSTEM_CONTROL para o próximo driver inferior.

Requisitos

Requisito Valor
de cliente com suporte mínimo Disponível no Windows 2000 e versões posteriores do Windows.
da 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 de DDI WmiComplete(wdm)

Consulte também

DpWmiExecuteMethod

DpWmiFunctionControl

DpWmiQueryDataBlock

DpWmiQueryReginfo

DpWmiSetDataBlock

DpWmiSetDataItem

IRP_MJ_SYSTEM_CONTROL

IRP_MN_REGINFO_EX

IoCompleteRequest

WMILIB_CONTEXT