다음을 통해 공유


새 기본 드라이버 만들기

기본 드라이버를 사용하여 INF 기반 설치를 사용하지만 특정 하드웨어 디바이스에 반드시 연결되지는 않는 소프트웨어를 처리하고 관리합니다.

기본 드라이버의 배경 및 이점

Windows 10 버전 1903 이전에는 INF 기반 설치를 사용했지만 특정 하드웨어 디바이스에 반드시 연결되지 않은 특정 유형의 소프트웨어는 OS에서 완전히 지원되지 않았습니다. 이러한 소프트웨어 조각은 INF 파일을 설치를 위한 매니페스트로 사용했지만 OS는 이 시나리오를 직접 인식하지 못했으며 기본적으로 처리할 수 있는 지원이 없었습니다.

이러한 소프트웨어 조각은 하드웨어 디바이스에 연결되지 않았기 때문에 하드웨어에 관계없이 전체 시스템에 설치됩니다. 결과적으로 이러한 소프트웨어 조각이 OS 업그레이드 시 제대로 설치, 제거 또는 처리되었다는 보장은 없었습니다.

Windows 10 버전 1903부터 플러그 앤 플레이 플랫폼은 이러한 유형의 소프트웨어 패키지를 최상위 엔터티로 처리하고 관리하므로 특히 OS 업그레이드 및 재설정 시나리오 중에 이러한 소프트웨어의 안정성이 향상되고 적절한 동작이 보장됩니다.

이 새로운 플랫폼 지원을 활용하는 소프트웨어 유형을 기본 드라이버 라고 합니다. 기본 드라이버는 INF 기반 설치를 계속 사용하며 기본 플랫폼은 드라이버 저장소 를 사용하여 모든 관련 파일을 추적합니다.

그런 다음 기본 플러그 앤 플레이 플랫폼은 OS 업그레이드 시 드라이버 상태를 정상적으로 설치, 제거 및 유지 관리합니다.

개념적으로 이러한 INF는 다르게 관리됩니다. 이전에는 [DefaultInstall](그리고 종종 [DefaultUninstall])이 스크립트와 같은 방식으로 SetupAPI 에서 처리되었으며, 여기서 INF는 매니페스트로 사용되었고 SetupAPI 는 호출자를 대신하여 관련 섹션의 지침을 실행했습니다.

변경 내용을 실행 취소하려면(제거를 수행하려면) 설치 섹션과 반대되는 명령 집합을 수행한 INF 섹션을 지정해야 합니다. 그러나 기본 드라이버를 사용하는 INF는 제거 섹션이 필요하지 않습니다.

기본 드라이버는 디바이스 드라이버와 동일한 설치 및 제거 API를 사용합니다. 여기서 제거 API는 설치 작업으로 역 작업 집합을 수행하고 드라이버 패키지를 설치하거나 제거하는 작업은 해당 섹션을 처리합니다.

기본 드라이버 기능에 액세스하기 위한 INF 요구 사항

  • 버전 섹션은 PnP 드라이버와 마찬가지로 완료되어야 합니다.

    • Provider 지시문을 채워야 합니다.

    • 클래스 지시문을 채워야 합니다.

    • ClassGuid 지시문을 채워야 합니다.

  • 드라이버는 DCH 규격이어야 합니다.

  • [제조업체] 섹션이 없을 수 있습니다.

  • [DefaultInstall] 섹션은 아키텍처로 데코레이트되어야 하며 디코레이트되지 않은 버전이 없을 수 있습니다.

    • 정답: [DefaultInstall.NTamd64]

    • 틀렸습니다. [DefaultInstall]

  • [DefaultUninstall]이 INF에 없을 수 있습니다(예외에 대한 레거시 호환성 참조).

Windows 10 버전 1903 이상을 대상으로 하는 기본 드라이버

Windows 10 버전 1903 이상에서만 대상으로 하는 기본 드라이버는 DiInstallDriverDiUninstallDriver를 사용하여 드라이버 저장소에서 소프트웨어를 제대로 설치하고 제거해야 합니다.

또한 드라이버는 Dirid 13 을 사용하여 드라이버 저장소를 설치할 원하는 대상으로 올바르게 지정해야 합니다.

레거시 호환성

기본 드라이버에서는 [DefaultUninstall]이 금지되어 있지만 하위 수준의 OS 호환성을 위해 예외가 발생합니다. Windows에서는 기본 드라이버를 지원하는 OS 버전이 [DefaultUninstall] 섹션을 무시하도록 하는 INF 지시문을 도입했습니다. 드라이버 패키지가 하위 수준의 OS 버전을 지원해야 하는 경우 플랫폼이 이러한 경우를 적절하게 처리할 수 있도록 다음 구문을 포함합니다.

[DefaultUninstall.NTamd64]
LegacyUninstall=1

[DefaultInstall] 및 [DefaultUninstall] 섹션은 여전히 아키텍처로 데코레이트되어야 합니다. 그러나 를 포함하여 LegacyUninstall=1Windows는 [DefaultUninstall] 섹션(Windows 10 버전 1903 이상)을 무시합니다. 이렇게 하면 기본 드라이버 패키지를 제거하기 위해 레거시 설치/제거 애플리케이션에서 하위 수준으로 사용할 수 있는 해당 섹션을 INF에 포함할 수 있습니다.

Windows 10 버전 1903부터 setupapi.dll InstallHInfSection API에 아키텍처 데코레이트된 [DefaultInstall] 또는 [DefaultUninstall] 섹션을 전달하는 경우 드라이버 패키지가 기본 드라이버 기능을 지원하는지 확인합니다. 지정된 섹션을 레거시 방식으로 처리하는 대신 기본 드라이버 기능을 지원하는 경우 INF는 적절하게 DiInstallDriver 또는 DiUninstallDriver에 전달됩니다. 이러한 방식으로 단일 설치 관리자는 호환되는 OS 버전에서 기본 드라이버를 사용하고 이전 OS 버전에 대한 지원을 유지할 수 있습니다.

디바이스 드라이버 INF에서 변환

[Manufacturer]를 사용하는 INF를 [DefaultInstall]을 사용하는 INF로 변환하려면 INF를 약간 변경해야 합니다. [Manufacturer] 섹션과 달리 [DefaultInstall] 섹션은 진입점 및 설치 섹션입니다. 이는 개념적으로 [제조업체], [모델] 및 [DDInstall] 섹션을 하나로 결합합니다.

다음 INF는 하드웨어에 설치되지 않으므로 InfVerif 에서 1297 오류를 수신합니다.

[Manufacturer]
%Company% = Driver, NTx86, NTamd64

[Driver.NTx86]
%DeviceDesc% = InstallSection_32,

[Driver.NTamd64]
%DeviceDesc% = InstallSection_64,

[InstallSection_64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg

[InstallSection_64.Services]
AddService = MyService,, MyService_Install

[InstallSection_32]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg

[InstallSection_32.Services]
AddService = MyService,, MyService_Install

위의 INF는 아래와 같이 [DefaultInstall] 기반 INF로 변환할 수 있습니다.

[DefaultInstall.NTamd64]
CopyFiles = MyCopyFiles_64
AddReg = MyAddReg

[DefaultInstall.NTamd64.Services]
AddService = MyService,, MyService_Install

[DefaultInstall.NTx86]
CopyFiles = MyCopyFiles_x86
AddReg = MyAddReg

[DefaultInstall.NTx86.Services]
AddService = MyService,, MyService_Install