INF 문자열 섹션
INF 파일에는 해당 INF의 다른 위치에 지정된 모든 %strkey% 토큰을 정의하려면 하나 이상의 문자열 섹션이 있어야 합니다.
[Strings] |
[Strings.LanguageID] ...
strkey1 = ["]some string["]
strkey2 = " string-with-leading-or-trailing-whitespace " |
"very-long-multiline-string" |
"string-with-semicolon" |
"string-ending-in-backslash" |
""double-quoted-string-value""
...
항목
strkey1, strkey2, ...
INF 파일의 각 문자열 키는 문자, 숫자 및/또는 기타 명시적으로 표시되는 문자로 구성된 고유한 이름을 지정해야 합니다. 이러한 strkey 토큰 내의 % 문자는 로 %%표현되어야 합니다.
일부 문자열 | "일부 문자열"
문자, 숫자, 문장 부호, 암시적으로 표시되는 특정 문자, 특히 내부 공간 및/또는 탭 문자가 포함된 큰따옴표 문자(")를 사용하여 선택적으로 구분된 문자열을 지정합니다. 그러나 따옴표가 지정되지 않은 문자열은 내부 큰따옴표("), 세미콜론(;), 줄 바꿈, 반환 또는 보이지 않는 제어 문자를 포함할 수 없으며 백슬래시()를 최종 문자로 사용할 수 없습니다.
"* string-with-leading-or-trailing-whitespace* " |
""double-quoted-string-value""
%strkey% 토큰에 지정된 값은 다음 조건을 충족하는 경우 큰따옴표(")로 묶 어야 합니다 .
지정된 문자열에 값의 일부로 보존해야 하는 선행 또는 후행 공백이 있는 경우 선행 및/또는 후행 공백이 INF 파서에 의해 삭제되지 않도록 해당 문자열을 큰따옴표 문자로 묶어야 합니다.
텍스트 편집기의 줄 바꿈으로 인해 긴 문자열에 내부 줄 바꿈 또는 반환 문자가 포함될 수 있는 경우 초기 내부 줄 바꿈 또는 반환 문자에서 문자열이 잘리는 것을 방지하기 위해 큰따옴표로 묶어야 합니다.
이러한 문자열에 세미콜론이 포함된 경우 세미콜론에서 문자열이 잘리지 않도록 큰따옴표로 묶어야 합니다. ( INF 파일에 대한 일반 구문 규칙에서 이미 언급했듯이 세미콜론 문자는 INF 파일에서 각 주석을 시작합니다.)
이러한 문자열이 백슬래시로 끝나는 경우 문자열이 다음 항목과 연결되지 않도록 큰따옴표로 묶어야 합니다. (INF 파일에 대한 일반 구문 규칙에서 이미 언급했듯이 백슬래시 문자()는 INF 파일에서 줄 연속자로 사용됩니다.)
따옴표가 없는 문자열 사양과 마찬가지로 이러한 "따옴표 문자열"에는 내부 큰따옴표 문자를 포함할 수 없습니다. 그러나 하나 이상의 추가 큰따옴표 문자 쌍(예: ""some string"")을 사용하여 명시적으로 큰따옴표가 붙은 문자열 값으로 지정할 수 있습니다.
INF 파서는 이 섹션의 "따옴표 문자열"에 대해 가장 바깥쪽 큰따옴표 쌍을 삭제할 뿐만 아니라 이후의 각 순차적 큰따옴표 쌍을 작은따옴표 문자로 압축합니다.
예를 들어 구문 분석할 때 """some string""도 "some string"이 됩니다.
요약하자면 다음 중 한 가지가 true인 경우 모든 문자열을 큰따옴표 문자 쌍(")으로 묶어야 합니다.
- 문자열에는 선행 또는 후행 공백이 포함됩니다.
- 문자열이 너무 길어서 줄 바꿈이 됩니다.
- 문자열에는 세미콜론 또는 마지막 백슬래시 문자가 포함됩니다.
- 문자열 자체는 따옴표 붙은 문자열입니다.
시스템 INF 파서는 큰따옴표 문자열 구분 기호 외부의 선행 또는 후행 공백 문자와 함께 이러한 문자열을 구분하는 가장 바깥쪽에 있는 큰따옴표 문자 쌍을 삭제합니다.
설명
시스템 INF 파서는 %strkey% 토큰을 정의하는 "따옴표 문자열"에서 바깥쪽 큰따옴표 쌍을 제거하기 때문에 대부분의 시스템 INF 파일은 INF 구문 분석 중에 선행 및 후행 공백의 의도하지 않은 손실을 방지하기 위해 모든 %strkey% 토큰을 "따옴표 붙은 문자열"로 정의합니다. 또한 "따옴표 붙은 문자열"을 사용하면 선 간에 래핑되는 특히 긴 문자열 값을 잘라낼 수 없으며, 백슬래시가 끝나는 문자열은 INF 파일의 다음 줄에 연결할 수 없습니다.
단일 국제 INF 파일을 만들기 위해 INF에는 로캘별 문자열 집합이 있을 수 있습니다. 공식 구문 문에 표시된 대로 LanguageID 섹션입니다. LanguageID 확장은 다음과 같이 정의된 4자리 16진수 값(선행 "0x"제외)입니다.
- 하위 10비트에는 기본 언어 ID가 포함되고 다음 6비트에는 Winnt.h에 정의된 MAKELANGID 매크로에 지정된 대로 하위 언어 ID가 포함됩니다.
- 언어 및 하위 언어 ID는 Winnt.h에 정의된 Win32 LANG_XXX 및 SUBLANG_XXX 상수의 시스템 정의 값과 일치해야 합니다.
예를 들어 LanguageID 값 0407은 다음 예제와 같이 하위 언어 ID가 SUBLANG_GERMAN(01)인 LANG_GERMAN(07)의 기본 언어 ID를 나타냅니다.
[Strings] ; No language ID implies English
DiskName="My Excellent Software"
LocaleSubDir="English"
[Strings.0407] ; 0407 is the language ID for German
DiskName="Meine ausgezeichnete Software"
LocaleSubDir="German"
INF 파일에는 하나의 문자열과 함께 하나의 문자열 섹션만 포함될 수 있습니다. 각 LanguageID 값에 대한 LanguageID 섹션입니다.
Windows는 설치에 대한 모든 %strkey% 토큰을 변환하는 데 사용되는 단일 문자열 섹션을 선택합니다. 특정 컴퓨터의 현재 로캘에 따라 Windows는 다음과 같은 방식으로 문자열 섹션을 선택합니다.
Windows는 먼저 를 찾습니다 . 컴퓨터에 할당된 현재 로캘과 일치하는 INF의 LanguageID 값입니다. 정확히 일치하는 항목이 발견되면 Windows에서 해당 문자열을 사용합니다.LanguageID INF 내에서 정의된 모든 %strkey% 토큰을 변환하는 INF 섹션입니다.
모든 문자열에서 모든 문자열 토큰을 복제해야 합니다.* 섹션, 지역화할 필요가 없는 숫자/고정 상수도 있습니다.
그렇지 않으면 Windows에서 LANG_XXX 값과 SUBLANG_NEUTRAL 값을 SUBLANG_XXX 값과 일치하는 항목을 찾습니다. 이러한 일치 항목이 발견되면 Windows는 해당 INF 섹션을 사용하여 INF 내에 정의된 모든 %strkey% 토큰을 변환합니다.
그렇지 않으면 Windows는 LANG_XXX 값과 일치하는 항목을 찾고 동일한 LANG_XXX 패밀리에 대해 유효한 SUBLANG_XXX 를 찾습니다. 이러한 부분 일치 항목이 발견되면 해당 문자열을 사용합니다.LanguageID INF 내에서 정의된 모든 %strkey% 토큰을 변환하는 INF 섹션입니다.
그렇지 않으면 Windows는 장식되지 않은 문자열 섹션을 사용하여 INF 내에 정의된 %strkey% 토큰을 모두 변환합니다.
규칙에 따라 국제 시장을 위한 INF 파일 집합을 만드는 데 편리하게 사용할 수 있는 문자열 섹션은 모든 시스템 INF 파일 내에서 마지막 섹션입니다. INF 내의 모든 사용자 표시 문자열 값에 %strkey% 토큰을 사용하고 로캘별 문자열 섹션에 배치하면 이러한 문자열의 변환이 간소화됩니다. 로캘별 INF 파일에 대한 자세한 내용은 국제 INF 파일 만들기를 참조하세요.
문자열 섹션은 모든 INF 파일의 마지막 섹션이지만 문자열 섹션에 정의된 지정된 %strkey% 토큰은 특히 해당 토큰의 변환된 값이 필요한 모든 위치에서 INF의 다른 곳에서 반복적으로 사용할 수 있습니다. SetupAPI 함수는 각 %strkey% 토큰을 지정된 문자열로 확장한 다음, 확장된 값을 사용하여 추가 INF 처리를 합니다.
INF 파일 내에서 %strkey% 토큰을 사용하는 것은 사용자가 볼 수 있는 문자열 값으로 제한되지 않습니다. 각 토큰이 문자열 섹션 내에 정의되어 있는 한 이러한 토큰은 INF 작성기에 편리한 방식으로 사용할 수 있습니다 . 예를 들어 여러 GUID의 사양이 필요한 INF 파일을 작성할 때 각 GUID 값에 대한 대체 이름으로 의미 있는 이름을 사용하여 각 GUID에 대해 %strkey% 토큰을 만드는 것이 편리할 수 있습니다.
INF 파일의 %Strings 섹션에서 strkey% = "{GUID}" 값 집합을 지정하려면 각 명시적 GUID 값을 한 번만 입력해야 합니다. 이렇게 하면 INF 파일 전체에서 명시적 GUID 값을 사용하는 것보다 더 읽기 쉬운 내부 INF 설명서를 제공할 수 있습니다.
모든 %strkey% 토큰은 참조되는 INF 파일 내에서 정의되어야 합니다. 따라서 포함 및 필요 항목이 있는 INF 파일의 경우 포함된 INF에는 해당 INF에서 참조되는 모든 %strkey% 토큰을 정의하기 위한 자체 문자열 섹션이 있어야 합니다.
INF 문자열 섹션에서 종결 NULL 문자를 포함하여 대체 문자열의 최대 길이(문자)는 4096(Windows Vista 이상 버전의 Windows) 및 512(Windows Server 2003, Windows XP 및 Windows 2000)입니다. 문자열 대체 후 INF 파일 문자열의 최대 길이(문자)는 종결 NULL 문자를 포함하여 4096입니다.
예제
다음 예제에서는 영어권 국가/지역의 설치를 위해 시스템에서 제공하는 로캘별 dvd.inf의 Strings 섹션 조각을 보여 줍니다.
[Strings]
Msft="Microsoft"
MfgToshiba="Toshiba"
Tosh404.DeviceDesc="Toshiba DVD decoder card"
; ...
다음 예제에서는 문자열 연결을 보여줍니다.
[OEM Windows System Component Verification]
OID = 1.3.6.1.4.1.311.10.3.7 ; WHQL OEM OID
Notice = "%A% %B% %C% %D% %E%"
[Strings]
A = "This certificate is used to sign untested drivers that have not passed the Windows Hardware Quality Labs (WHQL) testing process."
B = "This certificate and drivers signed with this certificate are intended for use in test environments only, and are not intended for use in any other context."
C = "Vendors who distribute this certificate or drivers signed with this certificate outside a test environment may be in violation of their driver signing agreement."
D = "Vendors who have their drivers signed with this certificate do so at their own risk."
E = "In particular, Microsoft assumes no liability for any damages that may result from the distribution of this certificate or drivers signed with this certificate outside the test environment described in a vendor's driver signing agreement."