다음을 통해 공유


드라이버 패키지 격리를 따르도록 INF 포팅

이 문서는 드라이버 패키지를 Windows 드라이버로 업데이트하는 과정의 일부로 드라이버 패키지 격리를 따르도록 INF 파일을 업데이트하는 데 도움이 되는 빠른 조회 가이드입니다. 다음 섹션에서는 드라이버 패키지 격리 규격을 준수하도록 업데이트하는 방법에 대한 정보를 참조하여 드라이버 패키지 INF 파일에 있을 수 있는 몇 가지 일반적인 사항의 예를 제공합니다. 드라이버 패키지가 최신 운영 체제 버전에서 새로운 방법을 사용하는 동안 이전 운영 체제 버전에 대해 작업을 수행하는 이전 방법을 지원해야 하는 경우 INF에서 이를 달성하는 방법은 플랫폼 확장과 운영 체제 버전 결합을 참조하세요.

DestinationDirs가 DIRID 13이 아님

DestinationDirs 섹션에서 DIRID 13이 아닌 파일의 대상을 지정하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 드라이버 패키지의 모든 파일은 DIRID 13을 사용하는 것을 의미하는 드라이버 저장소에서 실행해야 합니다. 이렇게 하려면 DestinationDirs 섹션 이상으로 업데이트해야 할 수 있습니다. INF에서 페이로드한 파일을 참조하는 INF에서 수행하는 다른 작업도 업데이트해야 할 수 있습니다. 예를 들어 AddService 지시문에서 참조하는 서비스 설치 섹션 또는 AddReg 지시문으로 작성된 레지스트리 값에서 ServiceBinary 지시문을 업데이트해야 할 수 있습니다. 일반적으로 드라이버 스토어에서 실행은 Windows 10 1709 이상 버전에서 지원되지만 일부 디바이스 스택은 드라이버 저장소에서 실행되는 해당 스택에 연결하는 파일을 나중에 릴리스할 때까지 지원하지 않을 수 있습니다. 자세한 내용은 드라이버 저장소에서 실행을 참조 하세요.

AddReg를 사용하여 ETW 공급자 및 EventLog 채널 등록

INF에서 AddReg 지시문을 사용하여 ETW 공급자 및 EventLog 채널을 등록하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "OwningPublisher", 0x0, "{35356277-0b54-43da-b324-671006d74759}"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "Enabled", 0x00010001, 1
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "Isolation", 0x00010001, 1
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "ChannelAccess",0x0, \
"O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x3;;;BO)(A;;0x5;;;SO)(A;;0x1;;;IU)(A;;0x3;;;SU)(A;;0x1;;;S-1-5-3)(A;;0x2;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Channels\ExampleProvider/Analytic", "Type", 0x00010001, 2
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}" , , 0x0, "ExampleProvider"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}", "ResourceFileName", 0x00020000, "%13%\ExampleBinary.sys"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}", "MessageFileName", 0x00020000, "%13%\ExampleBinary.sys"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}\ChannelReferences\0", , 0x0, "ExampleProvider/Analytic"
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}\ChannelReferences\0", "Id", 0x00010001, 16
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}\ChannelReferences\0", "Flags", 0x00010001, 0
HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\WINEVT\Publishers\{35356277-0b54-43da-b324-671006d74759}\ChannelReferences", Count, 0x00010001, 1

AddReg를 사용하여 ETW 공급자 및 EventLog 채널을 등록하는 대신 DDInstall.Events 섹션AddEventProvider 지시문을 사용하여 등록해야 합니다. 예시:

[ExampleDDInstall.Events]
AddEventProvider={35356277-0b54-43da-b324-671006d74759}, Example_EVvntProvider_Inst

[Example_EventProvider_Inst]
ProviderName=ExampleProvider
ResourceFile=%13%\ExampleBinary.sys
MessageFile=%13%\ExampleBinary.sys
AddChannel=ExampleProvider/Analytic,0x3,Example_Channel_Inst ; Note that the type of the channel here is different than in the raw AddReg. Please see the AddEventProvider documentation for appropriate values

[Example_Channel_Inst]
Isolation=1
Access="O:BAG:SYD:(A;;0xf0007;;;SY)(A;;0x7;;;BA)(A;;0x3;;;BO)(A;;0x5;;;SO)(A;;0x1;;;IU)(A;;0x3;;;SU)(A;;0x1;;;S-1-5-3)(A;;0x2;;;S-1-5-33)(A;;0x1;;;S-1-5-32-573)"
Enabled=1
Value=16

DDInstall.Events 섹션에서 AddEventProvider 지시문을 사용하는 것은 Windows 10 1809 이상 버전의 Windows에서 지원됩니다.

AddReg를 사용하여 AutoLogger 등록

INF에서 AddReg 지시문을 사용하여 ETW AutoLogger를 등록하거나 수정하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, BufferSize, %REG_DWORD%, 0x00000040
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, GUID, %REG_SZ%, "{6f1373c7-eec8-495c-bfe5-1270336368df}"
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, Start, %REG_DWORD%, 0x00000001
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, MaximumBuffers, %REG_DWORD%, 0x00000040
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger, LogFileMode, %REG_DWORD%, 0x400
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger\{35356277-0b54-43da-b324-671006d74759}, EnableLevel, %REG_DWORD%, 0x00000004
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger\{35356277-0b54-43da-b324-671006d74759}, MatchAnyKeyword, %REG_QWORD%, 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
HKLM,SYSTEM\CurrentControlSet\Control\WMI\Autologger\ExampleAutoLogger\{35356277-0b54-43da-b324-671006d74759}, Enabled, %REG_DWORD%, 0x00000001

AddReg를 사용하여 AutoLogger를 등록하거나 업데이트하는 대신 DDInstall.Events 섹션의 AddAutoLogger 또는 UpdateAutoLogger 지시문을 사용하여 등록하거나 업데이트해야 합니다. 예시:

[ExampleDDInstall.Events]
AddAutoLogger=ExampleAutoLogger,{6f1373c7-eec8-495c-bfe5-1270336368df},Example_AutoLogger_Inst

[Example_AutoLogger_Inst]
Start=1
BufferSize = 0x40
LogFileMode=0x400
MaximumBuffers=0x40
AddAutoLoggerProvider={35356277-0b54-43da-b324-671006d74759},Example_AutoLoggerProvider_Inst

[Example_AutoLoggerProvider_Inst]
Enabled=1
EnableLevel=0x4
MatchAnyKeyword=0

DDInstall.Events 섹션에서 AddAutoLogger 또는 UpdateAutoLogger 지시문을 사용하는 것은 Windows 11 이상 버전의 Windows에서 지원됩니다.

AddReg를 사용하여 RunOnce 키에 항목 추가

INF에서 AddReg 지시문을 사용하여 RunOnce 키에 항목을 추가하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

[ExampleDDInstall]
AddReg = Example_Registry

[Example_Registry]
HKLM, Software\Microsoft\Windows\CurrentVersion\RunOnce, ExampleEntry, ,"application.exe"

지원되지 않습니다. INF는 전역 레지스트리 항목을 수정하면 안 됩니다. 드라이버 패키지를 설치할 때 일회성 설정 작업이 필요한 경우 구성 요소 INF 파일 내에서 AddSoftware 지시문을 사용하여 시작할 수 있습니다. 이는 중요하지 않은 작업에만 해당합니다. 이 드라이버 패키지와 함께 설치된 디바이스 또는 디바이스에 대한 중요한 기능은 디바이스 설치 외부에 있는 실행 중인 작업에 의존해서는 안 됩니다.

AddReg를 사용하여 실행 키에 항목 추가

INF에서 AddReg 지시문을 사용하여 실행 키에 항목을 추가하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

[ExampleDDInstall]
AddReg = Example_Registry

[Example_Registry]
HKLM, Software\Microsoft\Windows\CurrentVersion\Run, ExampleEntry, ,"application.exe"

지원되지 않습니다. INF는 전역 레지스트리 항목을 수정하면 안 됩니다. 실행 항목이 시스템에 소프트웨어 추가 값을 추가하는 경우 애플리케이션은 유니버설 Windows 플랫폼 애플리케이션이어야 하며 DDInstall.Software 섹션의 AddSoftware 지시문을 사용하여 설치해야 합니다. 자세한 내용은 UWP(유니버설 Windows 플랫폼) 앱과 드라이버 페어링을 참조하세요. 이 소프트웨어가 UI를 표시할 필요가 없는 서비스인 경우 드라이버 패키지에서 AddService 지시문을 사용하여 Win32 서비스를 등록할 수 있습니다. 디바이스와 연결된 서비스를 등록할 때는 디바이스가 있는 경우에만 서비스가 실행 중이어야 합니다. 서비스에는 '요청 시작' 시작 유형이 있어야 하며 서비스 설치 섹션의 AddTrigger 지시문을 사용하여 디바이스가 시스템에 있을 때 서비스를 시작할 트리거를 설정해야 합니다. 이 작업은 디바이스의 드라이버가 노출할 디바이스 인터페이스를 식별하고 AddTrigger 지시문을 사용하여 해당 하드웨어가 나타날 때 서비스를 시작하도록 지정하여 수행됩니다. 런타임 시 서비스는 디바이스가 나가는지 모니터링해야 합니다. 서비스가 계속 실행될 필요가 없도록 디바이스가 시스템에서 제거되면 서비스 자체를 중지해야 합니다. 디바이스 인터페이스 도착 및 제거 알림을 등록하려면 CM_Register_Notification 참조하세요.

CopyFiles를 사용하여 'Program Files' 디렉터리에 파일 추가

INF에서 CopyFiles 지시문을 사용하여 'Program Files' 디렉터리에 파일을 추가하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 여기에는 DIRID 16422, 16426, 16427 및 16428 사용이 포함되며 이에 국한되지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

[DestinationDirs]
Example_CopyFiles = 16422, Contoso

[ExampleDDInstall]
CopyFiles = Example_CopyFiles

[Example_CopyFiles]
ExampleFile.exe

이는 지원되지 않습니다. INF는 파일을 전역 위치로 복사해서는 안 됩니다. 'Program Files' 디렉터리에서는 일반적으로 드라이버가 아닌 소프트웨어 애플리케이션을 설치하는 데 사용됩니다. 드라이버와 통신하는 디바이스에 대한 도우미 애플리케이션을 빌드하고 제공하는 것이 목표인 경우 하드웨어 지원 앱 지침을 참조하세요. 예를 들어 애플리케이션은 유니버설 Windows 플랫폼 애플리케이션일 수 있으며 DDInstall.Software 섹션AddSoftware 지시문을 사용하여 설치할 수 있습니다. 자세한 내용은 UWP(유니버설 Windows 플랫폼) 앱과 드라이버 페어링을 참조하세요. CopyFiles 항목이 시스템에 도우미 애플리케이션을 추가하지 않고 파일이 드라이버 패키지의 일부로 유지되어야 하는 경우 '드라이버 스토어에서 실행'해야 합니다.

UI를 시작하는 CoInstaller

INF에서 CoInstaller를 사용하여 사용자가 상호 작용해야 하는 애플리케이션을 설치하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF는 다음과 같이 CoInstaller를 등록할 수 있습니다.

[ExampleDDInstall.CoInstallers]
CopyFiles = CoInstallerCopyFilesSection
AddReg = Example_CoInstallers_AddReg

[CoInstallerCopyFilesSection]
ExampleCoInstall.dll

[Example_CoInstallers_AddReg]
HKR,,CoInstallers32,0x00010000,"ExampleCoInstall.dll,ExampleCoInstallEntryPoint"

이 상황을 처리하는 방법에 대한 자세한 내용은 드라이버 패키지에서 공동 설치 관리자 제거를 참조 하세요.

AddReg를 사용하여 INF에서 추가되지 않는 서비스 수정

INF에서 AddReg 지시문을 사용하여 INF의 AddService 지시문에 의해 추가되지 않는 서비스의 상태를 수정하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

[ExampleDDInstall]
AddReg = Example_Registry

[Example_Registry]
HKLM,SYSTEM\CurrentControlSet\Services\ServiceNotCreatedByThisInf\ExampleKey, ExampleValue, %REG_DWORD%, 1

지원되지 않습니다. INF는 해당 INF에서 만든 서비스에 대한 설정만 변경해야 하며 INF는 이 AddReg를 제거해야 합니다.

AddReg를 사용하여 서비스 루트의 상태 수정

INF에서 AddReg 지시문을 사용하여 서비스 상태의 루트에 키 또는 값을 만드는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

[ExampleDDInstall.Services]
AddService = ExampleService,0x2,Example_Service_Inst

[Example_Service_Inst]
DisplayName   = %SvcDesc%
ServiceType   = %SERVICE_KERNEL_DRIVER%
StartType     = %SERVICE_DEMAND_START%
ErrorControl  = %SERVICE_ERROR_NORMAL%
ServiceBinary = %13%\ExampleBinary.sys
AddReg = Example_Service_Registry

[Example_Service_Registry]
HKR,,ExampleValue,%REG_DWORD%,0x00000040
HKR,CustomSubkey,ExampleValue,%REG_DWORD%,0x00000040

드라이버 패키지 격리를 준수하기 위해 서비스 레지스트리 키와 값을 제공하는 AddReg 지시문은 서비스의 매개 변수 하위 키 아래에 있는 키와 값만 수정할 수 있습니다.

INF가 부하 순서 그룹, 서비스 트리거 등과 같은 내장 서비스 상태를 수정하는 경우 AddService 지시문에 설명된 대로 해당 상태를 지정하기 위해 기본 제공 INF 지시문을 사용해야 합니다.

INF가 서비스의 루트에서 다른 상태를 만들거나 수정하는 경우 서비스의 매개 변수 하위 키로 설정을 이동해야 하며, DriverRegKeyParameters의 RegKeyType을 사용하여 런타임 에 IoOpenDriverRegistryKey 를 사용하여 매개 변수 하위 키에 액세스할 수 있습니다. IoOpenDriverRegistryKey는 Windows 10 1803 이상 버전의 Windows에서 지원됩니다.

HKCR AddReg를 사용하여 APO 등록

INF에서 HKCR 레지스트리 루트가 있는 AddReg 지시문을 사용하여 APO(오디오 처리 개체)를 등록하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "FriendlyName", , %APO_FriendlyName%
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "Copyright", , %MfgName%
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MajorVersion", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MinorVersion", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "Flags", 0x00010001, 0x0000000d
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MinInputConnections", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MaxInputConnections", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MinOutputConnections", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MaxOutputConnections", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "MaxInstances", 0x00010001, 0xffffffff
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "NumAPOInterfaces", 0x00010001, 1
HKCR,AudioEngine\AudioProcessingObjects\%EXAMPLE_CLSID%, "APOInterface0", , "{b0a50980-ded6-4f45-84cb-19d2d1245f6d}"

대신 APO 등록 정보는 DDInstall 섹션의 AddReg 지시문에서 참조하는 섹션에 있어야 합니다. 디바이스의 "소프트웨어"("드라이버"라고도 함) 레지스트리 상태 위치를 기준으로 설정을 배치하려면 HKCR 레지스트리 루트를 HKR 레지스트리 루트로 변경해야 합니다. 자세한 내용은 INF 파일의 처리 모드 및 효과에 대한 API 등록을 참조 하세요.

UMDF 드라이버 버전이 2보다 작음

드라이버 패키지가 버전 2 이전의 UMDF 버전을 사용하는 UMDF(사용자 모드 드라이버 프레임워크) 드라이버를 페이로드하는 경우 "Windows 드라이버"를 준수하지 않습니다. UMDF 드라이버를 최신 UMDF 버전으로 이동하는 방법에 대한 자세한 내용은 UMDF 1에서 UMDF 2로 드라이버 포팅을 참조하세요.

AddReg를 사용하여 디바이스 스택에 상하 필터 추가

INF에서 AddReg 지시문을 사용하여 디바이스 스택에 상하 필터를 추가하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

[ExampleDDInstall.HW]
AddReg = FilterAddReg

[FilterAddReg]
HKR,,"UpperFilters",0x00010000,"ExampleFilterDriver" ; REG_MULTI_SZ value

대신 AddFilter 지시문을 사용하여 필터를 디바이스 스택에 추가해야 합니다. 예시:

[ExampleDDInstall.Filters]
AddFilter = ExampleFilterDriver,, ExampleFilterSection

[ExampleFilterSection]
FilterPosition = Upper

디바이스 필터 추가에 대한 자세한 내용은 디바이스 필터 드라이버 순서를 참조하세요.

AddReg를 사용하여 미디어 범주 이름 값 등록

INF에서 AddReg 지시문을 사용하여 미디어 범주 이름 값을 등록하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

[MediaCategoryRegistration]
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\%ExampleGuid%,Name,,%ExampleName%

AddReg를 사용하여 글로벌 레지스트리 위치에 미디어 범주 이름을 등록하는 대신 DDInstall 섹션에서 HKR AddReg를 사용하여 디바이스 상대 상태로 등록해야 합니다. 예시:

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

[MediaCategoryRegistration]
HKR,MediaCategories\%ExampleGuid%,Name,,%ExampleName%

디바이스 상대 상태를 사용하여 미디어 범주 이름을 등록하는 것은 Windows 10 버전 1809 이상 버전의 Windows에서 지원됩니다. 자세한 내용은 오디오 엔드포인트 디바이스에 대한 친숙한 이름을 참조 하세요 .

AddReg를 사용하여 미디어 범주 표시 값 등록

INF에서 AddReg 지시문을 사용하여 미디어 범주 표시 값을 등록하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

[ExampleDDInstall]
AddReg=MediaCategoryRegistration

[MediaCategoryRegistration]
HKLM,SYSTEM\CurrentControlSet\Control\MediaCategories\%ExampleGuid%,Display,1,00,00,00,00

이 값은 사용되지 않으며 INF에서 제거해야 합니다.

AddReg를 사용하여 DmaSecurity\AllowedBuses 값 등록

INF에서 AddReg 지시문을 사용하여 레지스트리 키 아래에 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses 값을 지정하는 경우 INF는 드라이버 패키지 격리를 준수하지 않습니다. 예를 들어 INF에는 다음이 있을 수 있습니다.

[ExampleDDInstall]
AddReg=DmaSecurityRegistration

[DmaSecurityRegistration]
HKLM,SYSTEM\CurrentControlSet\Control\DmaSecurity\AllowedBuses,"Example Friendly Name Description",0,PCI\VEN_ABCD&DEV_0123

Windows 11 버전 24H2부터 이 값은 사용되지 않으며 INF에서 제거해야 합니다. 자세한 내용은 BitLocker 자동 디바이스 암호화 하드웨어 요구 사항을 참조하세요.