Использование INF-файла компонента
Если вы хотите включить программное обеспечение в режиме пользователя для использования с устройством в Windows 10, у вас есть следующие параметры для создания драйвера, совместимого с DCH:
Способ | Сценарий |
---|---|
Приложения поддержки оборудования (HSA) | Программное обеспечение надстройки устройства, упаковаемое как приложение UWP, которое поставляется и обслуживается из Microsoft Store. Рекомендуемый подход. |
Компоненты программного обеспечения | Программное обеспечение надстройки устройства — это двоичный файл MSI или EXE, служба Win32 или программное обеспечение, установленное с помощью AddReg и CopyFiles. Указанный двоичный файл выполняется только в классических выпусках (Home, Pro и Enterprise). Указанный двоичный файл не будет работать в Windows 10S. |
Компонент программного обеспечения — это отдельный автономный пакет драйвера, который может устанавливать один или несколько модулей программного обеспечения. Установленное программное обеспечение повышает ценность устройства, но не требуется для основных функций устройств и не требует связанной службы драйверов функций.
Эта страница содержит рекомендации по использованию компонентов программного обеспечения.
Начало работы
Чтобы создать компоненты, INF-файл расширения указывает директиву INF AddComponent один или несколько раз в разделе INF DDInstall.Components. Для каждого компонента программного обеспечения, на который ссылается INF-файл расширения, система создает виртуальное дочернее устройство, перечисленное программным обеспечением. Несколько пакетов драйверов могут ссылаться на один и тот же программный компонент.
Дочерние элементы виртуальных устройств можно обновлять независимо так же, как и любое другое устройство, если запущено родительское устройство. Мы рекомендуем разделить функциональные возможности на столько разных групп, сколько имеет смысл с точки зрения обслуживания, а затем создать один программный компонент для каждой группы.
Вы предоставите INF-файл для каждого программного компонента.
Если ваш компонент программного обеспечения INF указывает директиву AddSoftware, компонент INF:
Можно указать директиву AddSoftware один или несколько раз.
Примечание.
При использовании типа 2 директивы AddSoftware не требуется использовать INF-файл компонента. Директиву можно использовать в любой INF успешно. Однако директива AddSoftware типа 1 должна использоваться из INF компонента.
Кроме того, на устройстве программного компонента любой INF (компонент или нет):
- Можно указать службы пользователей Win32 с помощью директивы AddService.
- Может устанавливать программное обеспечение с помощью директивы INF AddReg и директивы INF CopyFiles.
- Не требуется служба драйвера функций.
- Можно удалить пользователем независимо от родительского устройства.
Пример компонента INF можно найти в наборе средств установки пакета driver для универсальных драйверов.
Примечание. Чтобы устройство компонента, перечисленное по программному обеспечению, функционировалось, его родитель должен быть запущен. Если для родительского устройства нет драйвера, разработчики драйверов могут создавать собственные и при необходимости использовать драйвер сквозной передачи "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 в разделе директивы INF AddSoftware с переменной контекста <<DeviceInstanceID>>
среды выполнения.
Затем исполняемый файл может получить идентификатор экземпляра устройства компонента программного обеспечения из своего входящего списка аргументов.
Затем, если компонент программного обеспечения предназначен для универсальной целевой платформы, используйте следующую процедуру:
- Вызовите CM_Locate_DevNode с идентификатором экземпляра устройства компонента программного обеспечения, чтобы получить дескриптор устройства.
- Вызовите CM_Get_Parent , чтобы получить дескриптор родительского устройства. Это родительское устройство, которое добавило компонент программного обеспечения с помощью директивы INF AddComponent.
- Затем, чтобы получить идентификатор экземпляра устройства родительского объекта, вызовите CM_Get_Device_ID на дескриптор из CM_Get_Parent.
Если компонент программного обеспечения предназначен только для целевой платформы рабочего стола, используйте следующую процедуру:
- Вызовите 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".
Дополнительные сведения о классах установки см. в разделе "Классы установки устройств, доступные поставщикам".