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


Установка функций сканирования в MFP с одним PDO

Важно!

Начиная с WDK для Windows 11 версии 22H2 распространяемые установщики WDF больше не поддерживаются. Чтобы узнать, как обойти это изменение, см. статью Распространяемые установщики WDF не работают в статье Известные проблемы WDK .

Для установки функций сканирования на многофункциональных принтерах, имеющих только один объект физического устройства (PDO), требуется специальная процедура. Если устройство идентифицирует себя как принтер, INF-файл принтера может вызвать совместный установщик WIA для установки функции сканирования.

Корпорация Майкрософт рекомендует, чтобы каждая логическая функция многофункционального принтера должна иметь собственный PDO, если это вообще возможно. Следует избегать связывания нескольких функций устройства с одним PDO.

Если вы регистрируете совместный установщик WIA в качестве совместного установщика устройства, программа установки всегда вызывает соустановщик WIA для обработки установки до и после установщика класса Printer. Совместный установщик WIA создает интерфейс устройства класса Image в PDO принтера и сохраняет все необходимые сведения в разделе реестра интерфейса устройства. Текущее расположение этого раздела в реестре:

HKLM\SYSTEM\CurrentControlSet\Control\DeviceClasses\{6bdd1fc6-810f-11d0-bec7-08002be2092f}\<символьная ссылка устройства>

Этот ключ не гарантированно останется в этом расположении в будущих версиях операционной системы. Чтобы открыть этот ключ, вызовите SetupDiOpenDeviceInterfaceRegKey.

Служба WIA перечисляет все PDO класса Image и интерфейсы устройств. Таким образом, только что созданный интерфейс устройства перечисляется как устройство WIA.

Windows DDK поставляется с примером INF, который устанавливает функции сканирования на многофункциональном принтере только с одним PDO. Имя этого файла — mfpoemprn.inf, который находится в каталоге \src\print\infs .

Установка функций сканирования в MFP

  1. Укажите sti_ci.dll в качестве значения записи CoInstallerEntry .

    Inf для вашего устройства должен иметь раздел INF DDInstall.CoInstallers , чтобы иметь возможность зарегистрировать совместный установщик для установки устройства. Этот раздел должен выглядеть примерно так:

    [OEMMFP.GPD.CoInstallers]
    AddReg=WIA.CoInstallers.AddReg
    
    [WIA.CoInstallers.AddReg]
    HKR,,CoInstallers32,0x00010000,"sti_ci.dll, CoInstallerEntry"
    
  2. Включите запись WIASection в раздел INF DDInstall , который ссылается на раздел, содержащий все параметры, связанные с WIA. Раздел, содержащий параметры, связанные с WIA, должен находиться в том же INF-файле.

    [OEMMFP.GPD]
    CopyFiles=@OEMMFP.DLL,@OEMPRT1.DLL,@OEMUI.DLL,OEMMFP.GPD.WIA.CopyFiles
    WIASection=OEMMFP.GPD.WIA
    
    [OEMMFP.GPD.WIA]
    Description=%OEM_MFP_SCANNER%
    SubClass=StillImage
    DeviceType=1
    Capabilities=0x00000011
    AddReg=OEMMFP.GPD.WIA.AddReg
    DeviceData=OEMMFP.GPD.WIA.DeviceData
    ICMProfiles="sRGB Color Space Profile.icm"
    USDClass="{XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX}"
    

    Включив запись WIASection , установщик класса Image не создает devnode для устройства, а создает дополнительный интерфейс устройства. Соответственно, он использует ранее упомянутый раздел реестра интерфейса устройства для хранения информации, связанной с STI/WIA.

  3. Убедитесь, что в разделе INF DDInstall копируются все необходимые файлы.

    Кроме того, можно перечислить файлы для копирования в WIASection, но они не будут перечислены в диспетчер устройств.

Записи Include и Needs нельзя использовать в разделе WIASection .

Все части в режиме ядра должны быть установлены с помощью исходного раздела INF DDInstall.

Если устройство поддерживает горячее подключение и требует наличия собственного компонента режима ядра, оно должно создать и включить интерфейс устройства класса Image. Этот интерфейс является дополнением к любым другим интерфейсам устройств класса, таким как интерфейс устройства класса Print.

Компонент режима ядра включает интерфейс устройства класса Image на devnode устройства с вызовом функции IoSetDeviceInterfaceState . Если интерфейс устройства класса Image включен, вызывается событие Plug and Play, уведомляющее службу WIA о том, что устройство подключено.