Использование INF-файла компонента
Если вы хотите включить программное обеспечение в пользовательском режиме для использования с устройством на Windows 10, вы можете создать драйвер, совместимый с DCH:
Метод | Сценарий |
---|---|
Приложения поддержки оборудования (HSA) | Программное обеспечение надстройки устройства, упакованое в виде приложения UWP, которое доставляется и обслуживается из Microsoft Store. Рекомендуемый подход. |
Компоненты программного обеспечения | Дополнительное программное обеспечение устройства — это двоичный файл MSI или EXE, служба Win32 или программное обеспечение, установленное с помощью AddReg и CopyFiles. Двоичные файлы, на которые ссылается ссылка, выполняются только в выпусках для настольных компьютеров (Домашняя, Pro и Корпоративная). Указанный двоичный файл не будет работать в Windows 10S. |
Программный компонент — это отдельный автономный пакет драйверов, который может установить один или несколько программных модулей. Установленное программное обеспечение повышает ценность устройства, но не требуется для основных функциональных возможностей устройства и не требует связанной службы драйвера функций.
На этой странице приведены рекомендации по использованию программных компонентов.
Начало работы
Для создания компонентов INF-файл расширения указывает директиву INF AddComponent один или несколько раз в разделе INF DDInstall.Components . Для каждого программного компонента, на который ссылается INF-файл расширения, система создает виртуальное дочернее устройство с перечислением программного обеспечения. Несколько пакетов драйверов могут ссылаться на один и тот же программный компонент.
Дочерние элементы виртуального устройства можно обновлять независимо так же, как и любое другое устройство, при условии, что родительское устройство запущено. Рекомендуется разделить функциональные возможности на столько разных групп, сколько имеет смысл с точки зрения обслуживания, а затем создать один программный компонент для каждой группировки.
Вы предоставите INF-файл для каждого компонента программного обеспечения.
Если в inf-файле программного компонента указана директива AddSoftware, то inf-код компонента:
- Должен быть универсальным INF-файлом.
- Необходимо указать класс установки SoftwareComponent .
Директиву AddSoftware можно указать один или несколько раз.
Примечание
При использовании типа 2 директивы AddSoftware не требуется использовать inf-файл компонента. Директиву можно успешно использовать в любом INF. Однако директива AddSoftware типа 1 должна использоваться из inf компонента.
Кроме того, любой inf (компонент или нет), соответствующий на устройстве программного компонента:
- Можно указать службы пользователей Win32 с помощью директивы AddService.
- Может устанавливать программное обеспечение с помощью директивы INF AddReg и ДИРЕКТИВы INF CopyFiles.
- Не требуется служба драйвера функций.
- Может быть удален пользователем независимо от родительского устройства.
Пример inf компонента можно найти в наборе средств установки пакета драйверов для универсальных драйверов.
Примечание. Чтобы устройство с программным перечислением компонентов функционировали, необходимо запустить его родительский элемент. Если для родительского устройства нет драйвера, разработчики драйверов могут создать собственный драйвер и при необходимости использовать драйвер сквозной передачи "umpass.sys". Этот драйвер входит в состав Windows и фактически выполняет только запуск устройства. Чтобы использовать umpass.sys, разработчики должны использовать директивы INCLUDE/Needs INF в разделе DDInstall для каждого возможного раздела [DDInstall.*] в соответствующих разделах [UmPass.*], как показано ниже, независимо от того, указывает ли INF директивы для этого раздела или нет:
[DDInstall]
Include=umpass.inf
Needs=UmPass
; also include any existing DDInstall directives
[DDInstall.HW]
Include=umpass.inf
Needs=UmPass.HW
; also include any existing DDInstall.HW directives
[DDInstall.Interfaces]
Include=umpass.inf
Needs=UmPass.Interfaces
; also include any existing DDInstall.Interfaces directives
[DDInstall.Services]
Include=umpass.inf
Needs=UmPass.Services
; also include any existing any DDInstall.Services directives
Доступ к устройству из программного компонента
Чтобы получить идентификатор экземпляра устройства, связанного с программным компонентом, используйте значение SoftwareArguments в разделе Директива INFSoftware с переменной контекста <<DeviceInstanceID>>
среды выполнения.
Затем исполняемый файл может получить идентификатор экземпляра устройства компонента программного обеспечения из списка входящих аргументов.
Далее, если программный компонент предназначен для универсальной целевой платформы, используйте следующую процедуру:
- Вызовите CM_Locate_DevNode с идентификатором экземпляра устройства компонента программного обеспечения, чтобы получить дескриптор устройства.
- Вызовите CM_Get_Parent , чтобы получить дескриптор родительского устройства. Это родительское устройство, которое добавило программный компонент с помощью директивы INF AddComponent.
- Затем, чтобы получить идентификатор экземпляра устройства родительского объекта, вызовите CM_Get_Device_ID дескриптора из CM_Get_Parent.
Если программный компонент предназначен только для целевой платформы desktop, используйте следующую процедуру:
- Вызовите SetupDiCreateDeviceInfoList , чтобы создать пустой набор сведений об устройствах.
- Вызовите SetupDiOpenDeviceInfo с идентификатором экземпляра устройства программного компонента.
- Вызовите SetupDiGetDeviceProperty с
DEVPKEY_Device_Parent
, чтобы получить идентификатор экземпляра устройства родительского объекта.
Пример
В следующем примере показано, как можно использовать программный компонент для установки панели управления с помощью исполняемого файла для графического карта.
INF-файл пакета драйвера
[Version]
Signature = "$WINDOWS NT$"
Class = Extension
ClassGuid = {e2f84ce7-8efa-411c-aa69-97454ca4cb57}
ExtensionId = {zzzzzzzz-zzzz-zzzz-zzzz-zzzzzzzzzzzz} ; replace with your own GUID
Provider = %CONTOSO%
DriverVer = 06/21/2006,1.0.0.0
CatalogFile = ContosoGrfx.cat
PnpLockdown = 1
[Manufacturer]
%CONTOSO%=Contoso,NTx86
[Contoso.NTx86]
%ContosoGrfx.DeviceDesc%=ContosoGrfx, PCI\VEN0001&DEV0001
[ContosoGrfx.NT]
;empty
[ContosoGrfx.NT.Components]
AddComponent = ContosoControlPanel,, Component_Inst
[Component_Inst]
ComponentIDs = VID0001&PID0001&SID0001
[Strings]
CONTOSO = "Contoso Inc."
ContosoGrfx.DeviceDesc = "Contoso Graphics Card Extension"
INF-файл программного компонента
[Version]
Signature = "$WINDOWS NT$"
Class = SoftwareComponent
ClassGuid = {5c4c3332-344d-483c-8739-259e934c9cc8}
Provider = %CONTOSO%
DriverVer = 06/21/2006,1.0.0.0
CatalogFile = ContosoCtrlPnl.cat
PnpLockdown = 1
[SourceDisksNames]
1 = %Disk%,,,""
[SourceDisksFiles]
ContosoCtrlPnl.exe = 1
[DestinationDirs]
DefaultDestDir = 13
[Manufacturer]
%CONTOSO%=Contoso,NTx86
[Contoso.NTx86]
%ContosoCtrlPnl.DeviceDesc%=ContosoCtrlPnl, SWC\VID0001&PID0001&SID0001
[ContosoCtrlPnl.NT]
CopyFiles=ContosoCtrlPnl.NT.Copy
[ContosoCtrlPnl.NT.Copy]
ContosoCtrlPnl.exe
[ContosoCtrlPNl.NT.Services]
AddService = , %SPSVCINST_ASSOCSERVICE%
[ContosoCtrlPnl.NT.Software]
AddSoftware = ContosoGrfx1CtrlPnl,, Software_Inst
[Software_Inst]
SoftwareType = 1
SoftwareBinary = %13%\ContosoCtrlPnl.exe
SoftwareArguments = <<DeviceInstanceID>>
SoftwareVersion = 1.0.0.0
[Strings]
SPSVCINST_ASSOCSERVICE = 0x00000002
CONTOSO = "Contoso"
ContosoCtrlPnl.DeviceDesc = "Contoso Control Panel"
Процесс проверки и отправки драйверов для infs компонентов совпадает с процессом для обычных INFs. Дополнительные сведения см. в статье Windows HLK начало работы.
Дополнительные сведения о классах установки см. в разделе Классы установки определяемых системой устройств, доступные поставщикам.