Все операции, которые может выполнять драйвер устройства, разбиты на группы (функциональности).
Для добавления поддержки в устройство (главное или дочернее) каких-либо операций, нужно
Создать класс, унаследованный от класса нужно функциональности.
Например, Управление электропитанием.
Перекрыть в созданном классе методы, реализующие нужные операции.
Например, ExecutePower
Создать объект этого класса в конструкторе нужного устройства
Пример.
interface type TTestPowerDeviceEngine = class(TPowerDeviceEngine) private procedure SetPowerOn(NewPowerOn: Boolean); public procedure ExecutePower(InputParams: TPowerInputParams; OutputParams: TPowerOutputParams; CancelHandle: THandle); override; end; TTestPowerMainDeviceInterface = class(TMainDeviceInterface) public constructor Create(DeviceHandle: TDeviceHandle; IniParams: TIniParams); override; end; implementation procedure TTestPowerDeviceEngine.ExecutePower(InputParams: TPowerInputParams; OutputParams: TPowerOutputParams; CancelHandle: THandle); begin SetPowerOn(InputParams.PowerOn); end; procedure TTestPowerDeviceEngine.SetPowerOn(Value: Boolean); begin with Device.BeginUpdateDeviceState(True) do begin try PowerOn := Value; finally EndUpdateDeviceState; end; end; end; constructor TTestPowerMainDeviceInterface.Create(DeviceHandle: TDeviceHandle; IniParams: TIniParams); begin inherited Create(DeviceHandle, IniParams); TTestPowerDeviceEngine.Create(Self, IniParams); // Некоторый код пропущен end;
В устройстве может быть реализовано несколько разных функциональностей.