배터리 미니클래스 드라이버의 DispatchDeviceControl 루틴
전원 관리자는 복합 배터리 드라이버를 통해 미니클래스 드라이버에 디바이스 제어 IRP(IRP_MJ_DEVICE_CONTROL)를 보냅니다. 배터리 미니클래스 드라이버의 DispatchDeviceControl 루틴은 배터리 IOCTL을 포함하는 IRP를 처리합니다.
DispatchDeviceControl에서 미니클래스 드라이버는 클래스 드라이버의 BatteryClassIoctl 루틴을 호출하여 시스템 정의 디바이스 제어 작업을 수행할 수 있습니다. BatteryClassIoctl은 배터리에 대한 디바이스 제어 IOCTL을 처리합니다.
DispatchDeviceControl 루틴은 다음을 수행해야 합니다.
미니클래스 드라이버가 프라이빗 IOCTL을 정의하는 경우 현재 IOCTL이 그 중 하나인지 확인합니다. 이 경우 요청된 작업을 수행하고, IRP를 완료하고, IO_NO_INCREMENT 지정하고, 4단계로 이동합니다.
IOCTL이 미니클래스 드라이버에서 정의한 프라이빗 IOCTL이 아닌 경우 BatteryClassIoctl을 호출하여 IRP 및 BatteryClassInitializeDevice에서 반환된 클래스 핸들을 전달합니다. 예를 들면 다음과 같습니다.
Status = BatteryClassIoctl (NewBattNP->ClassHandle, Irp);클래스 드라이버의 BatteryClassIoctlroutine은 IOCTL이 지정된 배터리용인지 여부를 결정합니다. 이 경우 해당 BatteryMiniXxx 루틴을 호출하여 요청을 충족한 다음 IRP를 완료하고 STATUS_SUCCESS 반환합니다. 그렇지 않으면 STATUS_NOT_SUPPORTED 반환합니다.
BatteryClassIoctl이 배터리 IRP가 아님을 나타내는 STATUS_NOT_SUPPORTED 반환하는 경우 IRP를 다음 하위 드라이버에 전달합니다.
반환된 상태를 자체 함수 반환 값으로 전달합니다.