Поделиться через


Подпрограмма DispatchSystemControl драйвера миникласса батареи

Драйверы мини-класса батареи должны поддерживать инструментарий управления Windows (WMI), предоставляя подпрограмму DispatchSystemControl для обработки IRP_MJ_SYSTEM_CONTROL IRP. Инструментарий WMI предоставляет драйверам согласованный способ предоставления данных измерений и инструментирования.

Для выполнения начальной обработки драйверы мини-класса батареи используют подпрограмму BatteryClassSystemControl , которая принимает параметр WmiLibContext , указывающий таблицу функций диспетчеризации. Подпрограмма использует член MinorFunction IRP_MJ_SYSTEM_CONTROL для определения вызываемой функции диспетчеризации.

Все драйверы для аккумуляторных устройств должны обрабатывать определенные запросы WMI. Драйверы мини-класса батареи перенаправляют эти запросы WMI в драйвер класса батареи, а не поддерживают их напрямую. Для обработки запросов WMI драйвер мини-класса предоставляет указатель на подпрограмму DpWmiQueryDataBlock в элементе QueryWmiDataBlockWMILIB_CONTEXT. Драйвер мини-класса не требуется для обработки любого другого типа WMI-запроса и может задать для других членов WMILIB_CONTEXT значение 0, если это не так.

В подпрограмме DpWmiQueryDataBlock драйвер мини-класса вызывает подпрограмму BatteryClassQueryWmiDataBlock , позволяя драйверу класса батареи обрабатывать запрос WMI, если это возможно. Если драйвер класса батареи обрабатывает GUID класса WMI, он завершает IRP. В противном случае BatteryClassQueryWmiDataBlock возвращает значение STATUS_WMI_GUID_NOT_FOUND. Затем драйвер мини-класса может выполнить обработку для конкретного драйвера и использовать WmiCompleteRequest для выполнения запроса.

Для обработки WMI IRP драйверы мини-класса батареи должны вызывать только BatteryClassQueryWmiDataBlock . В реализации минимальной обработки WMI для драйвера мини-класса батареи, если BatteryClassQueryWmiDataBlock возвращает STATUS_WMI_GUID_NOT_FOUND, драйвер мини-класса просто вызывает WmiCompleteRequest со значением состояния STATUS_WMI_GUID_NOT_FOUND.