PathCchCanonicalize 함수(pathcch.h)

경로 문자열을 정식 형식으로 변환합니다.

이 함수는 길이가 MAX_PATH 최종 경로로 제한된다는 점에서 PathCchCanonicalizeEx 와 다릅니다.

이 함수는 호출자가 스택에 저장된 반환된 문자열의 크기를 선언해야 한다는 점에서 PathAllocCanonicalize 와 다릅니다.

이 함수는 "\", "\?" 및 "\?\UNC" 접두사를 사용하여 경로를 허용한다는 점에서 PathCanonicalize 와 다릅니다.

참고 버퍼 오버런 가능성을 방지하기 위해 PathCanonicalize 대신 PathCchCanonicalizeEx 또는 PathAllocCanonicalize 함수를 사용해야 합니다.

구문

WINPATHCCHAPI HRESULT PathCchCanonicalize(
  [out] PWSTR  pszPathOut,
  [in]  size_t cchPathOut,
  [in]  PCWSTR pszPathIn
);

매개 변수

[out] pszPathOut

이 함수가 성공적으로 반환될 때 정식화된 경로 문자열을 수신하는 버퍼에 대한 포인터입니다.

[in] cchPathOut

pszPathOut이 가리키는 버퍼의 크기(문자)입니다.

[in] pszPathIn

원래 경로 문자열에 대한 포인터입니다. 이 값이 빈 문자열을 가리키거나 "." 및 ".." 요소가 제거되면 빈 문자열이 발생하는 경우 단일 백슬래시가 pszPathOut이 가리키는 버퍼에 복사됩니다.

반환 값

이 함수가 성공하면 S_OK 반환합니다. 그렇지 않으면 다음을 포함하여 HRESULT 코드를 반환합니다.

반환 코드 설명
E_INVALIDARG
cchPathOut 값이 PATHCCH_MAX_CCH보다 큽니다.
PATHCCH_E_FILENAME_TOO_LONG
경로 세그먼트가 표준 경로 세그먼트 길이 제한인 256자를 초과합니다.
E_OUTOFMEMORY
함수가 필요한 크기의 버퍼를 할당할 수 없습니다.

설명

이 함수는 경로에 포함된 문자열 "." 및 ".."에 응답합니다. ".." 문자열은 바로 앞의 경로 세그먼트를 제거하도록 나타냅니다. "." 문자열은 다음 경로 세그먼트를 건너뛰도록 나타냅니다. 경로의 루트 세그먼트는 제거할 수 없습니다. 경로 세그먼트보다 더 많은 ".." 문자열이 있는 경우 함수는 S_OK 반환하고 pszPathOut 에서 가리키는 버퍼에는 단일 백슬래시 "\"가 포함됩니다.

"" 와일드 카드 문자 앞에 오는 경우를 제외하고 모든 후행 마침표가 경로에서 제거됩니다. 이 경우 '' 문자 뒤에 단일 마침표가 유지되지만 다른 모든 후행 마침표는 제거됩니다.

결과 경로가 루트 드라이브("x:")인 경우 백슬래시가 추가됩니다("x:\").

이 함수는 슬래시(/)를 슬래시(\)로 변환하지 않습니다. 신뢰할 수 없는 입력을 사용하면 이 함수 자체를 사용하여 경로를 하위 경로 또는 ID의 다른 경로와 비교할 수 있는 형식으로 변환할 수 없습니다. 이 기능이 필요한 호출자는 이 함수를 사용하기 전에 슬래시로 앞으로 변환해야 합니다.

다음 예제에서는 이러한 문자열의 효과를 보여 줍니다.

원본 문자열 정식화된 문자열
C:\name_1\.\name_2\.. \name_3 C:\name_1\name_3
C:\name_1\.. \name_2\.\name_3 C:\name_2\name_3
C:\name_1\name_2\.\name_3\.. \name_4 C:\name_1\name_2\name_4
C:\name_1\.\name_2\.\name_3\.. \name_4\.. C:\name_1\name_2
C:\name_1\*... C:\name_1\*.
C:\.. C:\

요구 사항

   
지원되는 최소 클라이언트 Windows 8 [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows Server 2012 [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 pathcch.h
라이브러리 Pathcch.lib

추가 정보

PathCchCanonicalizeEx