INF 유효성 검사 오류 및 경고
이 항목에서는 Microsoft Visual Studio 수행하는 자동 INF 확인 또는 InfVerif 도구를 실행할 때 나타날 수 있는 드라이버 설치 오류 및 경고에 대해 설명합니다.
WDK 10에서 Visual Studio 2015부터 드라이버를 빌드할 때 오류 목록 창에 다음과 같은 INF 파일 오류가 나타날 수 있습니다. 명령줄에서 InfVerif.exe 실행하는 경우 도구는 명령 프롬프트 또는 HTML 버전의 결과에 이러한 오류를 표시합니다.
오류 지침
InfVerif는 오류 번호가 낮을수록 더 심각한 문제가 발생한다는 일반적인 규칙을 따릅니다. 대부분의 오류 코드는 InfVerif에 제공된 인수에 따라 경고 또는 오류일 수 있습니다.
오류 처리
하드웨어 개발자 센터 대시보드에서 드라이버 테스트를 통과하려면 모든 오류를 수정해야 합니다. 오류는 다음 조건과 관련이 있습니다.
- INF 파서가 INF를 성공적으로 해석할 수 없음
- INF 파서는 기본값 가정(모호한 구문)을 통해서만 INF를 해석할 수 있습니다.
- InfVerif에 대한 인수는 규칙 집합을 INF에 적용해야 함을 나타냅니다(예: 유니버설).
개발자 센터 드라이버를 제출하기 전에 경고를 수정할 필요는 없지만 보고되는 문제를 이해하는 데 시간을 할애하는 것이 좋습니다. 지정된 경고를 이해하지 못하는 경우 INF가 항상 예상대로 동작하지 않을 수 있습니다.
경고는 일반적으로 다음과 관련이 있습니다.
- 잘못된 구문이지만 적절한 경우 유효한 시나리오가 있는 구문
- 지정된 InfVerif 매개 변수에 유효하지만 유니버설과 같은 다른 모드에서는 오류가 발생하는 구문입니다.
유니버설 설정과 관련된 문제는 다음과 같은 경우 오류로 표시됩니다.
- Visual Studio 대상 플랫폼을 유니버설 또는 모바일로 설정하여 드라이버를 빌드합니다.
- 명령줄에서 InfVerif.exe 실행하고 /u 플래그를 지정합니다.
유니버설 설정과 관련된 문제는 다음과 같은 경우 경고로 표시됩니다.
- Visual Studio 대상 플랫폼이 Desktop으로 설정된 드라이버를 빌드합니다.
- 명령줄에서 InfVerif.exe 실행하고 /u 플래그를 지정하지 않습니다.
오류 코드
오류 코드는 다음과 같은 분류로 제공됩니다.
많은 오류 코드가 자명한 의미를 가지기 때문에 아래에 나열된 오류 코드는 아닙니다. 1000-1099 범위의 오류는 기본 구문 오류이므로 자명한 것으로 간주됩니다.
INF 파일의 구문(1100-1299)
InfVerif 실패는 드라이버 제출 실패를 의미하지만 드라이버 설치는 여전히 성공할 수 있습니다. 드라이버를 설치할 때 INF 파일에 오류가 있는 경우 Windows 설정의 기본값도 시도하기 때문입니다. Windows 이 범위의 오류로 인해 드라이버 설치에 실패하지 않지만 이 범위의 오류는 OS 버전 또는 SKU에 따라 동작이 변경되었을 수 있음을 나타냅니다. 드라이버가 성공적으로 설치되는 경우 이러한 오류 는 드라이버가 제대로 설치되지 않을 수 있는 상황이 있음을 나타냅니다.
| 오류 코드 | Description |
|---|---|
| 1100: DriverStore Copyfile 이름 불일치 | 이 오류는 파일이 원래 드라이버 저장소 이름 및 위치에서 드라이버 저장소의 다른 이름과 위치로 복사되거나 이름을 바꿀 때 발생합니다. 예를 들면 다음과 같습니다.[SourceDisksFiles] DriverFile.sys=1,x64드라이버 저장소는 원래 드라이버 패키지 디렉터리 구조를 유지 관리합니다. 위의 코드에서 DriverFile.sys 원래 위치는 INF location\x64이지만 CopyFiles 지시문은 INF location\SubDirectory에 배치합니다. 파일 이름이 복사본의 일부로 변경된 경우에도 동일한 오류가 표시됩니다. |
| 1203: 섹션을 찾을 수 없음 | 예를 들어 다음 INF 구문은 오류 1203을 발생합니다.[MyInstallSection] CopyFiles=driverFile.sys이 오류는 CopyFiles 지시문에 복사할 파일 목록을 지정하는 섹션 이름이 예상되므로 보고됩니다. 그러나 CopyFiles 지시문은 파일 이름을 지정할 수 있습니다. 섹션 이름과 파일 이름을 구분하려면 다음과 같이 @ 토큰을 사용하여 파일 이름을 앞에 추가합니다. [MyInstallSection] CopyFiles=@driverFile.sys |
| 1204: 공급자는 Microsoft일 수 없습니다. | [버전] 섹션의 공급자 필드는 Microsoft를 지정할 수 없습니다.
[Version]
Signature="$Windows NT$"
Class=Sample
ClassGuid={78A1C341-4539-11d3-B88D-00C04FAD5171}
Provider="Microsoft"
|
| 1205: [Directive1] 및 [Directive2] 지시문에서 참조되는 섹션 [Driver_files] | 이 경고는 두 개의 서로 다른 지시문이 동일한 섹션을 가리킬 때마다 생성됩니다.
대부분의 경우 이것은 실제로 오류가지만 경우에 따라 조건이 의도적으로 있더라도 1205가 보고됩니다. |
| 1212: [DefaultInstall]과 [Manufacturer] 둘 다 사용할 수 없습니다. | 단일 INF는 [DefaultInstall] 및 [Manufacturer]를 모두 포함할 수 없습니다. 둘 다 사용하여 작성한 INF는 두 섹션 중 하나를 제거해야 합니다. |
| 1220: 포함된 INF에 정의된 섹션을 직접 참조할 수 없음 | INF 파일이 포함된 INF의 DDInstall 섹션을 참조하는 경우 Needs 지시문을 사용해야 합니다. 포함된 INF의 섹션을 참조하는 다른 지시문은 오류 1220을 발생합니다.
이 예제에서 A.INF의 설치 섹션은 B.INF에 해당하는 설치 섹션을 참조합니다. A.INF에는 다음이 포함됩니다. A.INF [InstallSectionA] Include = B.INF Needs = InstallSectionB AddReg = AddRegB ; 경고 1220 B.INF에는 다음이 포함됩니다. B.INF [InstallSectionB] AddReg = AddRegB [InstallSectionB.Services] ... Needs 지시문은 현재 설치 섹션에서 처리할 동일한 설치 섹션을 참조해야 합니다. 예를 들어 [InstallSectionA.Services]의 Needs 지시문은 을 가리킵니다. 다른 설치 섹션의 서비스입니다. Needs 지시문을 사용하여 동일한 INF의 다른 DDInstall 섹션의 동작을 포함할 수도 있습니다. 다른 유형의 섹션에 대해 Needs 지시문을 사용하면 원치 않는 동작이 발생할 수 있습니다. |
| 1221: 서비스 키를 수정할 수 없습니다. HKR을 사용해야 함 | 이 오류는 INF 파일이 서비스 레지스트리 키의 위치(예: HKLM\SYSTEM\CurrentControlSet\ServicesemService<> Name)를 참조한다는 것을 나타냅니다. 서비스 키에 액세스할 때는 HKR(상대 루트)을 사용하여 레지스트리 값을 디바이스 또는 드라이버 인스턴스와 연결해야 합니다.
HKR을 사용하는 경우 디바이스가 설치될 때까지 레지스트리 값이 표시되지 않습니다. |
| 1230: [SourceDisksFiles] 섹션에서 'xxxx' 파일이 누락되었습니다. | 이는 파일이 드라이버 패키지의 일부로 지정되었지만 INF에 상대적인 파일의 원본 위치가 [SourceDisksFiles] 섹션에 지정되지 않음을 나타냅니다.
[SourceDisksFiles] filename=disk id이 오류는 [SourceDisksFiles]의 아키텍처 데코레이팅 버전(예: [SourceDisksFiles.amd64])을 지정하는 경우 자주 발생하지만 INF에서 지원하는 모든 아키텍처에 [SourceDisksFiles] 섹션이 있는 것은 아닙니다. |
| 1233: 서명에 필요한 지시문 누락 | [버전] 섹션에서 드라이버 패키지에 서명을 받으려면 CatalogFile 지시문(및 연결된 카탈로그 파일)을 지정해야 합니다.
CatalogFile=wudf.cat |
| 1235: [문자열]에 정의되지 않은 문자열 토큰 | 지정된 문자열 토큰은 [Strings] 섹션에 정의가 없습니다. 예를 들어 INF 파일은 AddReg 지시문으로 지정된 추가 레지스트리 섹션에서%REG_DWORD%를 지정하지만 [Strings] 섹션에는 해당 REG_DWORD = 0x00010001 없습니다.
이 오류는 INF 파일이 환경 변수를 포함하는 레지스트리 값을 지정하는 경우 자주 발생합니다. 예를 들면 다음과 같습니다. [MyAddReg] HKR,,DllPath,%SystemRoot%\System32\myDll.sys이 줄을 사용하면 INF 파서가 레지스트리에 리터럴 "%SystemRoot%"를 저장하는 의도한 동작이 아니라 [Strings] 섹션에서 토큰 "SystemRoot"를 찾으려고 시도합니다. 문자열 대체를 수행하는 대신 리터럴 값 %SystemRoot%를 사용하려면 이스케이프 시퀀스 %%를 사용합니다. [MyAddReg] HKR,,DllPath,%%SystemRoot%%\System32\myDll.sys |
| 1280/1281: 클래스 이름 및 ClassGuid 불일치 | 이러한 오류는 INF에서 잘 알려진 클래스 또는 ClassGuid를 사용하지만 이러한 값 중 하나가 일치하지 않음을 나타냅니다. 예를 들어 다음과 같이 잘 알려진 Class/ClassGuid 쌍이 제공됩니다.
Class = Sample
ClassGuid = {78A1C341-4539-11d3-B88D-00C04FAD5171}
다음은 ClassGuid가 잘 알려져 있지만 클래스가 일치하지 않기 때문에 1280 오류를 생성합니다.
Class = ContosoDevices
ClassGuid = {78A1C341-4539-11d3-B88D-00C04FAD5171}
다음은 클래스가 잘 알려져 있지만 ClassGuid가 일치하지 않기 때문에 1281 오류를 생성합니다.
Class = Sample
ClassGuid = {99f58d4a-8093-4968-a93e-f74b26bb7f0a}
|
| 1285: Microsoft 정의 클래스에 [ClassInstall32] 섹션을 지정할 수 없습니다. | Windows 10 현재 IHV 제공 INF는 Microsoft 정의 클래스의 INF에서 [ClassInstall32]를 사용할 수 없습니다. |
| 1296: 하드웨어와 연결되지 않은 지정된 서비스 | Windows 10, 버전 1809 시작해서 경고에서 오류로 변경되었습니다. Tthe. 서비스 섹션은 정의된 각 대상 OS에 필요합니다. 이는 모범 사례이며 1809년뿐만 아니라 모든 INF에 적용됩니다.
이전에 서비스가 없어서 이 섹션을 포함하지 않았고 받은 편지함 드라이버 서비스를 사용하는 경우 만들어야 할 수 있습니다. NEEDS 및 INCLUDES 문을 사용하여 받은 편지함 INF의 서비스를 참조하는 서비스 섹션입니다. 예: INF 파일에는 다음이 있습니다. 이 오류를 해결하기 위한 각 OS 대상에 대한 서비스 섹션입니다. [XXXXXXXX.Install.NTx86.Services] Include=filename.inf Needs=inf-section-name.Services 함수 드라이버가 필요하지 않은 디바이스의 경우 다음과 같이 NULL 드라이버를 지정할 수 있습니다. AddService = ,2 INF가 비기능 디바이스를 설치하는 경우에만 이를 사용하여 드라이버가 필요하지 않음을 지정합니다. 예: 함수 드라이버가 아닌 필터 드라이버만 필요한 디바이스에는 다음 두 개의 AddService 지시문이 있습니다. AddService = MyFilterDriver,, My-Service-Install-Section AddService = ,2 |
| 1297: 디바이스 드라이버는 디바이스에 설치되지 않습니다. 의도된 경우 기본 드라이버를 사용합니다. | 이는 INF 파일이 디바이스 드라이버이지만 디바이스 드라이버로 사용되지 않음을 나타냅니다. 이로 인해 드라이버 저장소에서 드라이버를 처리하는 방법에 문제가 발생할 수 있습니다. 의도하지 않은 경우 INF를 확인하여 하드웨어 ID가 올바르게 지정되었는지 확인합니다. 드라이버가 디바이스에 설치할 의도가 없는 경우 기본 드라이버로 변환합니다. 자세한 내용은 디바이스 드라이버 INF에서 변환을 참조하세요. |
유니버설 INF(1300-1319)
중요
드라이버 INF 파일은 1300-1319 범위의 오류 번호와 함께 오류 또는 경고가 발생하지 않는 경우 범용입니다.
다음 오류 및 경고는 INF 구성 가능성과 관련이 있습니다.
| 오류/경고 코드 | Description |
|---|---|
| 1300: legacyXxx 발견 | LogConfig 또는 DDInstall.CoInstallers와 같은 사용되지 않는 섹션 또는 지시문을 사용하는 경우 이 오류가 표시됩니다. |
| 1301: legacyXxxoperationXxx를 찾았습니다. | LogConfig 또는 DDInstall.CoInstallers와 같은 사용되지 않는 섹션 또는 지시문을 사용하는 경우 이 오류가 표시됩니다. |
| 1302:legacyXxxoperationforXxx 발견 | 이 오류는 작업이 서비스 삭제 또는 파일 삭제와 같이 드라이버 패키지 외부에 영향을 줄 때 발생합니다. |
| 1303: 공동 설치 관리자를 정의하는 레거시 작업 발견 | 오류 1303은 AddReg 작업이 코인스탈러를 지정하고 있음을 나타냅니다. 예를 들면 다음과 같습니다.AddReg = HKR,,CoInstallers32,0x00010000,"MyCoinstaller.dll" |
| 1304: 상대 키가 아닌 키를 사용하여 레거시 작업을 찾았습니다. | 오류 1304는 레지스트리 작업에서 HKR 이외의 레지스트리 루트를 사용한다는 것을 나타냅니다. |
| 1305: 추가 가능한 다중 sz 값을 사용하여 레거시 작업을 찾았습니다. | 오류 1305는 INF가 REG_MULTI_SZ 값을 삭제하거나 기존 REG_MULTI_SZ 값을 추가했음을 나타냅니다. |
| 1306: 시스템이 아닌 대상 경로를 사용하여 레거시 작업을 찾았습니다. | 오류 1306은 파일 복사본이 %SystemRoot%에 없는 대상을 지정했음을 나타냅니다. |
| 1310-1312: Needs 지시문에 대한 잘못된 섹션 확장 | Need 지시문은 필요한 섹션의 복사/붙여넣기를 참조하는 섹션에 효과적으로 수행합니다. 기준 유효성 검사로 InfVerif는 섹션의 확장을 비교합니다. 즉, [DDInstall.Services]는 다른 [DDInstall.Services] 섹션에서만 Needs 지시문을 사용할 수 있습니다. |
| 1313-1314: 누락된 포함 지시문 | Needs 지시문을 사용하는 각 섹션에는 대상 섹션이 포함된 INF를 참조하는 해당 Include 지시문이 있어야 합니다. 이전에는 Include 지시문이 다른 INF 섹션에 있는 경우 Needs 지시문이 유효했습니다. |
| 133x: 기능 오류 | 여러 레지스트리 섹션이 단일 전역 키에 씁니다. 예를 들어 다른 섹션에서는 서비스가 다른 서비스 구성으로 설정되거나, 글로벌 레지스트리 키가 다른 데이터 값으로 설정되거나, 다른 원본 파일을 가리키는 대상 파일이 있을 수 있습니다. |
Windows 드라이버(1320-1329)
중요
132x 범위에서 오류 번호가 있는 오류 또는 경고가 발생하지 않는 경우 드라이버 INF 파일은 Windows 드라이버 요구 사항을 준수합니다. 이러한 요구 사항은 드라이버 격리 요구 사항 설명서에 자세히 설명되어 있습니다.
다음 오류 및 경고는 Windows 드라이버 요구 사항과 관련이 있습니다.
| 오류/경고 코드 | Description |
|---|---|
| 1320: 레지스트리 루트 Xxx 가 HKR로 격리되지 않음 | 오류 1320은 레지스트리 키 작업이 읽기 및 쓰기 상태에 정의된 레지스트리 요구 사항을 준수하지 않음을 나타냅니다. |
| 1321: Xxx 값의 레지스트리 루트 Xxx 가 HKR로 격리되지 않음 | 오류 1321은 레지스트리 값 작업이 읽기 및 쓰기 상태에 정의된 레지스트리 요구 사항을 준수하지 않음을 나타냅니다. |
| 1322: Xxx 파일의 대상 파일 경로 Xxx 가 DIRID 13으로 격리되지 않음 | 오류 1322는 드라이버 저장소에서 실행에서 정의된 요구 사항에 따라 파일이 잘못된 대상으로 복사되었음을 나타냅니다. |
| 1323: 서비스 레지스트리 키 Xxx 는 매개 변수 하위 키 아래에 있어야 합니다. | 오류 1323은 서비스 레지스트리 상태에 정의된 요구 사항에 따라 매개 변수 하위 키에서 서비스 레지스트리 값이 HKR로 설정되지 않음 을 나타냅니다. |
| 1324: [버전] 섹션에서 PnpLockdown=1을 지정해야 합니다. | 오류 1324는 PnpLockdown이 버전 섹션에서 지정되지 않음을 나타냅니다. 이 사양을 사용하면 PNP가 드라이버 패키지의 이진 파일에 보안을 추가하여 변조를 방지하고 항상 드라이버 패키지에 지정해야 합니다. |
설치(2000-2999)
2000-2999 범위의 문제는 경고로 나타납니다. 가능한 값은 다음과 같습니다.
| 오류 코드 | Description |
|---|---|
| 2083: 섹션이 참조되거나 사용되지 않음 | 이 경고는 INF 파일이 참조되지 않는 섹션을 제공한다는 것을 나타냅니다. 드라이버가 설치되면 경고에서 참조되는 섹션의 내용이 평가되지 않습니다. |
| 2222: 레거시 지시문은 무시됩니다. | 이 경고는 INF가 사용되지 않는 지시문을 지정했음을 나타냅니다. 드라이버가 설치되면 섹션을 참조하는 지시문이 평가되지 않습니다. 예를 들어 INF LogConfig 지시문 은 더 이상 지원되지 않으므로 다음 섹션에서 이 경고를 표시합니다.
[InstallSection.LogConfigOverride] LogConfig=LogConfigSection ...더 이상 사용되지 않는 INF 지시문에 대한 자세한 내용은 INF 지시문을 참조하세요. |
| 2223: 섹션에는 아키텍처 장식이 있어야 합니다. | 이 경고는 INF 파일에 아키텍처 장식이 없는 모델 섹션을 지정하는 INF Manufacturer 섹션이 포함되어 있음을 나타냅니다. 예를 들어 다음 INF 구문으로 인해 경고 2223이 발생합니다.[제조업체] %MfgName% = InstallSection드라이버를 설치할 때 위의 INF 구문은 기본적으로 x86입니다. 대신 지원되는 모든 아키텍처를 선언하고 각각에 해당하는 설치 섹션을 제공합니다. [제조업체] %MfgName% = InstallSection, NTX86, NTAMD64INF 파일이 x86에 대해 데코레이팅된 섹션과 디코레이트되지 않은 섹션을 지정하는 경우 드라이버를 설치할 때 디코팅되지 않은 섹션이 무시됩니다. |