Compartilhar via


Rotina DispatchSystemControl de um driver de miniclasse de bateria

Os drivers de miniclasse de bateria devem dar suporte à WMI (Instrumentação de Gerenciamento do Windows) fornecendo uma rotina DispatchSystemControl para lidar com o IRP IRP_MJ_SYSTEM_CONTROL . O WMI oferece uma maneira consistente de os drivers exporem dados de medição e instrumentação.

Para executar o processamento inicial, os drivers de miniclasse de bateria usam a rotina BatteryClassSystemControl , que usa um parâmetro WmiLibContext especificando uma tabela de expedição de funções. A rotina usa o membro MinorFunction de IRP_MJ_SYSTEM_CONTROL para determinar a função de expedição que ele chama.

Todos os drivers para dispositivos de bateria devem lidar com determinadas consultas WMI. Os drivers de miniclasse de bateria encaminham essas consultas WMI para o driver da classe de bateria em vez de dar suporte direto a elas. Para lidar com consultas WMI, o driver de miniclasse fornece um ponteiro para uma rotina DpWmiQueryDataBlock no membro QueryWmiDataBlock do WMILIB_CONTEXT. O driver de miniclasse não é necessário para lidar com qualquer outro tipo de solicitação WMI e pode definir os outros membros do WMILIB_CONTEXT como zero se não o fizer.

Em sua rotina DpWmiQueryDataBlock , o driver de miniclasse chama a rotina BatteryClassQueryWmiDataBlock , permitindo que o driver da classe de bateria manipule a solicitação de consulta WMI, se possível. Se o driver da classe de bateria manipular o GUID da classe WMI, ele concluirá o IRP. Caso contrário, BatteryClassQueryWmiDataBlock retornará um valor de STATUS_WMI_GUID_NOT_FOUND. Em seguida, o driver de miniclasse pode executar o processamento específico do driver e usar WmiCompleteRequest para concluir a solicitação.

Os drivers de miniclasse de bateria só precisam chamar BatteryClassQueryWmiDataBlock para processamento WMI IRP. Em uma implementação mínima de manipulação de WMI para um driver de miniclasse de bateria, se BatteryClassQueryWmiDataBlock retornar STATUS_WMI_GUID_NOT_FOUND, o driver de miniclasse simplesmente chamará WmiCompleteRequest com um valor status de STATUS_WMI_GUID_NOT_FOUND.