이 항목에서는 시스템 INF 디렉터리에 설치된 INF 파일의 원래 원본 경로를 검색하는 방법을 설명합니다. 이 검색을 직접 수행하는 SetupAPI 함수는 없지만 INF 파일에 항목을 포함하여 간접적으로 검색을 수행할 수 있으므로 INF 파일 항목에 액세스하는 SetupAPI 함수를 사용하여 설치된 INF 파일에서 원본 원본 경로 정보를 검색할 수 있습니다.
이 메서드는 시스템 INF 파일 디렉터리에 설치된 INF 파일에서만 작동합니다. 드라이버 저장소에 있는 INF 파일에는 이 메서드를 사용할 수 없습니다.
WDK(Windows 드라이버 키트)의 토스터 샘플과 함께 제공되는 공동 설치 관리자는 이 메서드를 사용하며 이 항목에는 이 메서드를 보여 주는 토스터 샘플의 발췌 내용이 포함되어 있습니다. 토스터 샘플에 대한 자세한 내용은 WDK의 src\general\toaster 디렉터리에 제공되는toasterpkg.htm참조하세요.
이 메서드를 사용하여 설치된 INF 파일의 원래 원본 경로를 검색하려면 다음을 수행합니다.
INF 파일에 첫 번째 필드가 %1% 문자열 키 토큰인 항목을 포함하는 섹션을 포함합니다. 기본적으로 %1% 문자열 키 토큰은 INF 파일의 원래 원본 경로를 나타냅니다. Windows에서 이러한 INF 파일을 설치하면 원본 원본 경로 문자열을 설치된 버전의 INF 파일과 함께 저장합니다. 이 메서드는 이 예제와 같이 %1% 사용되는 경우에만 작동합니다. 일반적으로 %1%의 결과는 문맥에 따라 결정됩니다. 예를 들어 추가 레지스트리 섹션 항목의 %1% 필드는 원래 원본 경로로 확인되지 않습니다. 대신 이 컨텍스트에서 %1% 드라이버 저장소에 있는 해당 INF 파일의 경로로 확인됩니다.
SetupOpenInfFile, SetupFindFirstLine 및 SetupGetStringField를 사용하여 %1% 문자열 키 토큰이 포함된 항목에서 원래 원본 경로를 검색합니다.
예를 들어 toasterpkg.inf 에는 첫 번째 필드가 %1% 문자열 키 토큰인 사용자 지정 OriginalInfSourcePath 항목이 포함된 다음 [ToasterCoInfo] 섹션이 포함됩니다.
[ToastCoInfo]
; Used by the toaster co-installer to figure out where the original media is
; located (so it can start value-added setup programs).
OriginalInfSourcePath = %1%
토스터 샘플에서 설명한 대로 INF가 구성된 경우 시스템 INF 디렉터리에 INF 파일을 설치한 후 원래 원본 경로를 검색할 수 있습니다. 원래 원본 경로를 검색하려면 먼저 SetupOpenInfFile 을 호출하여 설치된 INF 파일을 엽니다. 예를 들어 toastco.c 의 다음 코드 예제에서는 설치된 toasterpkg.inf 파일을 엽니다.
// Since the INF is already in %SystemRoot%\Inf, we need to find out where it
// originally came from. There is no direct way to ascertain an INF's
// path of origin, but we can indirectly determine it by retrieving a field
// from our INF that uses a string substitution of %1% (DIRID_SRCPATH).
//
hInf = SetupOpenInfFile(DriverInfoDetailData->InfFileName,
NULL,
INF_STYLE_WIN4,
NULL
);
설치된 INF 파일을 연 후 SetupFindFirstLine 을 호출하여 첫 번째 필드가 %1% 문자열 키 토큰인 항목이 포함된 섹션의 첫 번째 줄을 검색합니다. 다음으로 SetupGetStringField 를 호출하여 이 항목의 첫 번째 필드를 검색하고 INF 파일의 원래 원본 경로를 검색합니다. 예를 들어 toastco.c 의 다음 코드 예제는 사용자 지정 OriginalInfSourcePath 항목이 포함된 줄을 검색한 다음 이 항목의 첫 번째 필드를 검색합니다. 원래 INF의 첫 번째 필드는 %1% 문자열 키 토큰이므로 SetupGetStringField 는 INF 파일의 원래 원본 경로를 반환합니다.
// Contained within our INF should be a [ToastCoInfo] section with the
// following entry:
//
// OriginalInfSourcePath = %1%
//
// If we retrieve the value (i.e., field 1) of this line, we'll get the
// full path where the INF originally came from.
//
if(!SetupFindFirstLine(hInf, L"ToastCoInfo", L"OriginalInfSourcePath", &InfContext)) {
goto clean0;
}
if(!SetupGetStringField(&InfContext, 1, *MediaRootDirectory, MAX_PATH, &PathLength) ||
(PathLength <= 1)) {
goto clean0;