Manipulando solicitações WMI
Todos os drivers devem definir um ponto de entrada de tabela de expedição para uma rotina DispatchSystemControl para lidar com solicitações WMI. Se um driver se registrar como um provedor de dados WMI, ele deverá lidar com todas as solicitações WMI. Caso contrário, o driver deve encaminhar todas as solicitações WMI para o próximo driver inferior.
Todos os IRPs WMI têm o código principal IRP_MJ_SYSTEM_CONTROL e um dos seguintes códigos secundários:
IRP_MN_REGINFO, IRP_MN_REGINFO_EX — consulta ou atualiza as informações de registro de um driver depois que o driver chama IoWMIRegistrationControl.
IRP_MN_QUERY_ALL_DATA, IRP_MN_QUERY_SINGLE_INSTANCE – Consultas para todas as instâncias ou uma única instância de um determinado bloco de dados.
IRP_MN_CHANGE_SINGLE_ITEM, IRP_MN_CHANGE_SINGLE_INSTANCE — solicita que o driver altere um único item ou vários itens em uma instância de um bloco de dados.
IRP_MN_ENABLE_COLLECTION, IRP_MN_DISABLE_COLLECTION — solicita que o driver comece a acumular dados para um bloco que o driver registrou como caro de coletar ou para parar de acumular dados para esse bloco.
IRP_MN_ENABLE_EVENTS, IRP_MN_DISABLE_EVENTS — Solicita que o driver comece a enviar uma notificação de um determinado evento se o evento ocorrer enquanto ele estiver habilitado ou para parar de enviar uma notificação desse evento.
IRP_MN_EXECUTE_METHOD — solicita que o driver execute um método associado a um bloco de dados.
O componente do modo kernel WMI envia IRPs WMI a qualquer momento após o registro bem-sucedido de um driver como um provedor de dados WMI, normalmente quando um consumidor de dados no modo de usuário solicita informações WMI para o dispositivo de um driver. Se um driver se registrar como um provedor de dados WMI chamando IoWMIRegistrationControl, ele deverá lidar com cada solicitação WMI subsequente de uma das seguintes maneiras:
Chame a rotina da biblioteca WMI no modo kernel WmiSystemControl. Um driver pode chamar WmiSystemControl para lidar com solicitações relacionadas apenas a blocos que não usam nomes de instância dinâmica e que baseiam nomes de instância estática em uma única cadeia de caracteres de nome base ou na ID da instância do dispositivo de um PDO. Para obter mais informações, consulte Chamando WmiSystemControl para lidar com IRPs WMI.
Em sua rotina DispatchSystemControl , processe e conclua qualquer solicitação marcada com o ponteiro para seu objeto de dispositivo que o driver passou em sua chamada para IoWMIRegistrationControl e encaminhe outras solicitações de IRP_MJ_SYSTEM_CONTROL para o próximo driver inferior. Para obter mais informações, consulte Processando IRPs WMI em uma rotina DispatchSystemControl.
Para obter uma lista dos IRPs secundários do WMI, consulte IRPs menores do WMI.