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


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

Диспетчер питания отправляет irp управления устройствами (IRP_MJ_DEVICE_CONTROL) в драйверы мини-класса через составной драйвер батареи. Подпрограмма DispatchDeviceControl драйвера мини-класса батареи обрабатывает IRP, содержащие ICTL батареи.

В подпрограмме DispatchDeviceControl драйвер миникласса может вызывать подпрограмму BatteryClassIoctl драйвера класса для выполнения системных задач управления устройствами. BatteryClassIoctl обрабатывает ioCTL управления устройствами для батарей.

Подпрограмма DispatchDeviceControl должна:

  1. Определите, является ли текущий IOCTL частным IOCTL, определенным драйвером мини-класса. Если это так, выполните запрошенную операцию, завершите IRP с помощью IO_NO_INCREMENT и перейдите к шагу 4.

  2. Если IOCTL не является частным IOCTL, вызовите BatteryClassIoctl с IRP и дескриптором класса, возвращенным BatteryClassInitializeDevice. Пример:

    Status = BatteryClassIoctl (NewBattNP->ClassHandle, Irp);
    

    Подпрограмма BatteryClassIoctl драйвера класса проверяет, предназначен ли IOCTL для указанного аккумулятора. Если это так, он вызывает соответствующую подпрограмму BatteryMiniXxx для удовлетворения запроса и завершает IRP с STATUS_SUCCESS. В противном случае возвращается STATUS_NOT_SUPPORTED.

  3. Если BatteryClassIoctl возвращает STATUS_NOT_SUPPORTED, указывая, что это не IRP батареи, передайте IRP следующему ниже драйверу.

  4. Возвращает состояние в качестве возвращаемого значения функции.