DispatchSystemControl-Routine eines Akku-Miniklassentreibers
Akku-Miniklassentreiber müssen die Windows-Verwaltungsinstrumentation (WMI) unterstützen, indem sie eine DispatchSystemControl-Routine bereitstellen, um die IRP_MJ_SYSTEM_CONTROL IRP zu verarbeiten. WMI bietet eine konsistente Möglichkeit für Treiber, Mess- und Instrumentierungsdaten verfügbar zu machen.
Zum Ausführen der Erstverarbeitung verwenden Akku-Miniklassentreiber die BatteryClassSystemControl-Routine , die einen WmiLibContext-Parameter verwendet, der eine Dispatchtabelle mit Funktionen angibt. Die Routine verwendet das MinorFunction-Element von IRP_MJ_SYSTEM_CONTROL, um die von ihr aufgerufene Dispatchfunktion zu bestimmen.
Alle Treiber für Akkugeräte müssen bestimmte WMI-Abfragen verarbeiten. Akku-Miniklassentreiber leiten diese WMI-Abfragen an den Akkuklassentreiber weiter, anstatt sie direkt zu unterstützen. Um WMI-Abfragen zu verarbeiten, stellt der Miniklassentreiber einen Zeiger auf eine DpWmiQueryDataBlock-Routine im QueryWmiDataBlock-Member von WMILIB_CONTEXT bereit. Der Miniklassentreiber ist nicht erforderlich, um andere Arten von WMI-Anforderungen zu verarbeiten, und kann die anderen Member von WMILIB_CONTEXT auf 0 festlegen, wenn dies nicht der Fall ist.
In seiner DpWmiQueryDataBlock-Routine ruft der Miniklassentreiber die BatteryClassQueryWmiDataBlock-Routine auf, sodass der Akkuklassentreiber die WMI-Abfrageanforderung nach Möglichkeit verarbeiten kann. Wenn der Akkuklassentreiber die WMI-Klassen-GUID verarbeitet, wird die IRP abgeschlossen. Andernfalls gibt BatteryClassQueryWmiDataBlock den Wert STATUS_WMI_GUID_NOT_FOUND zurück. Der Miniklassentreiber kann dann treiberspezifische Verarbeitung ausführen und WmiCompleteRequest verwenden, um die Anforderung abzuschließen.
Akku-Miniklassentreiber müssen nur BatteryClassQueryWmiDataBlock für die WMI-IRP-Verarbeitung aufrufen. Wenn BatteryClassQueryWmiDataBlock STATUS_WMI_GUID_NOT_FOUND zurückgibt, ruft der Miniklassentreiber bei einer Implementierung mit minimaler WMI-Verarbeitung für einen Akku-Miniklassentreiber einfach WmiCompleteRequest mit dem status Wert STATUS_WMI_GUID_NOT_FOUND auf.