배터리 미니클래스 드라이버의 DispatchSystemControl 루틴
배터리 미니클래스 드라이버는 IRP_MJ_SYSTEM_CONTROL IRP를 처리하는 DispatchSystemControl 루틴을 제공하여 WMI(Windows Management Instrumentation)를 지원해야 합니다. WMI는 드라이버가 측정 및 계측 데이터를 노출하는 일관된 방법을 제공합니다.
초기 처리를 수행하기 위해 배터리 미니클래스 드라이버는 함수의 디스패치 테이블을 지정하는 WmiLibContext 매개 변수를 사용하는 BatteryClassSystemControl 루틴을 사용합니다. 루틴은 IRP_MJ_SYSTEM_CONTROL MinorFunction 멤버를 사용하여 호출하는 디스패치 함수를 확인합니다.
배터리 디바이스의 모든 드라이버는 특정 WMI 쿼리를 처리해야 합니다. 배터리 미니클래스 드라이버는 이러한 WMI 쿼리를 직접 지원하는 대신 배터리 클래스 드라이버로 전달합니다. WMI 쿼리를 처리하기 위해 미니클래스 드라이버는 WMILIB_CONTEXTQueryWmiDataBlock 멤버의 DpWmiQueryDataBlock 루틴에 대한 포인터를 제공합니다. 미니클래스 드라이버는 다른 유형의 WMI 요청을 처리할 필요가 없으며, 그렇지 않은 경우 WMILIB_CONTEXT 다른 멤버를 0으로 설정할 수 있습니다.
DpWmiQueryDataBlock 루틴에서 미니클래스 드라이버는 BatteryClassQueryWmiDataBlock 루틴을 호출하여 가능하면 배터리 클래스 드라이버가 WMI 쿼리 요청을 처리할 수 있도록 합니다. 배터리 클래스 드라이버가 WMI 클래스 GUID를 처리하면 IRP가 완료됩니다. 그렇지 않으면 BatteryClassQueryWmiDataBlock 은 STATUS_WMI_GUID_NOT_FOUND 값을 반환합니다. 그런 다음 미니클래스 드라이버는 드라이버별 처리를 수행하고 WmiCompleteRequest 를 사용하여 요청을 완료할 수 있습니다.
배터리 미니클래스 드라이버는 WMI IRP 처리를 위해 BatteryClassQueryWmiDataBlock 만 호출하면 됩니다. 배터리 미니클래스 드라이버에 대한 최소 WMI 처리 구현에서 BatteryClassQueryWmiDataBlock이 STATUS_WMI_GUID_NOT_FOUND 반환하는 경우 미니클래스 드라이버는 상태 값이 STATUS_WMI_GUID_NOT_FOUND WmiCompleteRequest를 호출합니다.