Routine DispatchSystemControl di un driver miniclasse batteria
I driver miniclasse della batteria devono supportare Strumentazione gestione Windows (WMI) fornendo una routine DispatchSystemControl per gestire il IRP_MJ_SYSTEM_CONTROL IRP. WMI offre un modo coerente per consentire ai driver di esporre i dati di misurazione e strumentazione.
Per eseguire l'elaborazione iniziale, i driver miniclass della batteria usano la routine BatteryClassSystemControl , che accetta un parametro WmiLibContext che specifica una tabella dispatch di funzioni. La routine usa il membro MinorFunction di IRP_MJ_SYSTEM_CONTROL per determinare la funzione dispatch che chiama.
Tutti i driver per i dispositivi a batteria devono gestire determinate query WMI. I driver miniclasse della batteria inoltrano queste query WMI al driver di classe della batteria anziché supportarle direttamente. Per gestire le query WMI, il driver miniclasse fornisce un puntatore a una routine DpWmiQueryDataBlock nel membro QueryWmiDataBlock di WMILIB_CONTEXT. Il driver miniclasse non è necessario per gestire qualsiasi altro tipo di richiesta WMI e può impostare gli altri membri di WMILIB_CONTEXT su zero se non lo fa.
Nella routine DpWmiQueryDataBlock , il driver miniclasse chiama la routine BatteryClassQueryWmiDataBlock , consentendo al driver della classe della batteria di gestire la richiesta di query WMI, se possibile. Se il driver della classe batteria gestisce il GUID della classe WMI, completa l'IRP. In caso contrario, BatteryClassQueryWmiDataBlock restituisce un valore di STATUS_WMI_GUID_NOT_FOUND. Il driver miniclasse può quindi eseguire l'elaborazione specifica del driver e usare WmiCompleteRequest per completare la richiesta.
I driver miniclass della batteria devono solo chiamare BatteryClassQueryWmiDataBlock per l'elaborazione IRP WMI. In un'implementazione di gestione WMI minima per un driver miniclasse della batteria, se BatteryClassQueryWmiDataBlock restituisce STATUS_WMI_GUID_NOT_FOUND, il driver miniclasse chiama semplicemente WmiCompleteRequest con un valore di stato di STATUS_WMI_GUID_NOT_FOUND.