구성 요소 INF 파일 사용
Windows 10에서 디바이스에 사용할 사용자 모드 소프트웨어를 포함하려는 경우 DCH 규격 드라이버를 만들 수 있는 다음 옵션이 있습니다.
메서드 | 시나리오 |
---|---|
HSA(하드웨어 지원 앱) | Microsoft Store에서 배달 및 서비스되는 UWP 앱으로 패키지된 디바이스 추가 기능 소프트웨어입니다. 권장되는 접근 방식입니다. |
소프트웨어 구성 요소 | 디바이스 추가 기능 소프트웨어는 MSI 또는 EXE 이진 파일, Win32 서비스 또는 AddReg 및 CopyFiles를 사용하여 설치된 소프트웨어입니다. 참조된 이진 파일은 데스크톱 버전(Home, Pro 및 Enterprise)에서만 실행됩니다. 참조된 이진 파일은 Windows 10S에서 실행되지 않습니다. |
소프트웨어 구성 요소는 하나 이상의 소프트웨어 모듈을 설치할 수 있는 별도의 독립 실행형 드라이버 패키지입니다. 설치된 소프트웨어는 디바이스의 가치를 향상시키지만 기본 디바이스 기능에는 필요하지 않으며 연결된 함수 드라이버 서비스가 필요하지 않습니다.
이 페이지에서는 소프트웨어 구성 요소 사용에 대한 지침을 제공합니다.
시작
구성 요소를 만들기 위해 확장명 INF 파일은 INF DDInstall.Components 섹션에서 INF AddComponent 지시문을 한 번 이상 지정합니다. 확장 INF 파일에서 참조되는 각 소프트웨어 구성 요소에 대해 시스템은 가상 소프트웨어 열거 자식 디바이스를 만듭니다. 둘 이상의 드라이버 패키지가 동일한 소프트웨어 구성 요소를 참조할 수 있습니다.
부모 디바이스가 시작되는 한 가상 디바이스 자식은 다른 디바이스와 마찬가지로 독립적으로 업데이트할 수 있습니다. 서비스 관점에서 적합한 만큼 다양한 그룹으로 기능을 분리한 다음 각 그룹화에 대해 하나의 소프트웨어 구성 요소를 만드는 것이 좋습니다.
각 소프트웨어 구성 요소에 대한 INF 파일을 제공합니다.
소프트웨어 구성 요소 INF가 AddSoftware 지시문을 지정하는 경우 구성 요소 INF:
- 범용 INF 파일이어야 합니다.
- SoftwareComponent 설치 클래스를 지정해야 합니다.
AddSoftware 지시문을 한 번 이상 지정할 수 있습니다.
참고 항목
AddSoftware 지시문의 형식 2를 사용하는 경우 구성 요소 INF를 사용할 필요가 없습니다. 지시문은 모든 INF에서 성공적으로 사용할 수 있습니다. 그러나 Type 1의 AddSoftware 지시문은 구성 요소 INF에서 사용해야 합니다.
또한 소프트웨어 구성 요소 디바이스에서 일치하는 모든 INF(구성 요소 여부)
- AddService 지시문을 사용하여 Win32 사용자 서비스를 지정할 수 있습니다.
- INF AddReg 지시문 및 INF CopyFiles 지시문을 사용하여 소프트웨어를 설치할 수 있습니다.
- 함수 드라이버 서비스가 필요하지 않습니다.
- 사용자가 부모 디바이스와 독립적으로 제거할 수 있습니다.
범용 드라이버용 드라이버 패키지 설치 도구 키트에서 구성 요소 INF의 예를 찾을 수 있습니다.
참고: 소프트웨어 열거형 구성 요소 디바이스가 작동하려면 해당 부모를 시작해야 합니다. 부모 디바이스에 사용할 수 있는 드라이버가 없는 경우 드라이버 개발자는 고유한 드라이버를 만들고 필요에 따라 통과 드라이버 "umpass.sys"를 활용할 수 있습니다. 이 드라이버는 Windows에 포함되어 있으며, 실제로 디바이스를 시작하는 것 외에는 아무 작업도 수행하지 않습니다. umpass.sys 사용하려면 개발자는 INF가 해당 섹션에 대한 지시문을 지정하는지 여부에 관계없이 아래와 같이 가능한 각 [DDInstall.*] 섹션에 대해 DDInstall 섹션의 Include/Needs INF 지시문을 아래와 같이 해당 [UmPass.*] 섹션에 사용해야 합니다.
[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
소프트웨어 구성 요소에서 디바이스 액세스
소프트웨어 구성 요소와 연결된 디바이스의 디바이스 인스턴스 ID를 검색하려면 INF AddSoftware 지시문 섹션의 SoftwareArguments 값을 런타임 컨텍스트 변수와 함께 <<DeviceInstanceID>>
사용합니다.
그런 다음, 실행 파일은 들어오는 인수 목록에서 소프트웨어 구성 요소의 디바이스 인스턴스 ID를 검색할 수 있습니다.
다음으로 소프트웨어 구성 요소가 유니버설 대상 플랫폼을 대상으로 하는 경우 다음 절차를 사용합니다.
- 소프트웨어 구성 요소의 디바이스 인스턴스 ID를 사용하여 CM_Locate_DevNode 호출하여 디바이스 핸들을 검색합니다.
- CM_Get_Parent 호출하여 해당 디바이스의 부모에 대한 핸들을 검색합니다. 이 부모는 INF AddComponent 지시문을 사용하여 소프트웨어 구성 요소를 추가한 디바이스입니다.
- 그런 다음 부모의 디바이스 인스턴스 ID를 검색하려면 CM_Get_Parent 핸들에서 CM_Get_Device_ID 호출합니다.
소프트웨어 구성 요소가 데스크톱 대상 플랫폼 만 대상으로 하는 경우 다음 절차를 사용합니다.
- SetupDiCreateDeviceInfoList를 호출하여 빈 디바이스 정보 집합을 만듭니다.
- 소프트웨어 구성 요소 디바이스의 디바이스 인스턴스 ID를 사용하여 SetupDiOpenDeviceInfo를 호출합니다.
- SetupDiGetDeviceProperty를
DEVPKEY_Device_Parent
호출하여 부모의 디바이스 인스턴스 ID를 검색합니다.
예시
다음 예제에서는 소프트웨어 구성 요소를 사용하여 그래픽 카드에 대한 실행 파일을 사용하여 제어판을 설치하는 방법을 보여 줍니다.
드라이버 패키지 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"
드라이버 유효성 검사 및 제출 프로세스는 일반 INF와 마찬가지로 구성 요소 INF에 대해 동일합니다. 자세한 내용은 Windows HLK 시작을 참조 하세요.
설치 클래스 에 대한 자세한 내용은 공급업체에서 사용할 수 있는 시스템 정의 디바이스 설정 클래스를 참조하세요.