2009. 9. 14. 08:57
GetShortPathName(...)의 함정
2009. 9. 14. 08:57 in 프로그래밍/Win32
GetShortPathName(C:\Program Files\AAA\AAA BBB);
를 하면,
C:\PROGRA~1\AAA\AAA~1
이 리턴될 것으로 기대되지만, 실제로,
C:\PROGRA~1\AAA\AAA BBB
가 리턴될때가 있습니다.
이는,
http://technet.microsoft.com/en-us/library/cc959352.aspx
에 기인한 것으로, 8.3 Format Off를 사용자가 할 수 있도록 OS에서 제공하였습니다.
즉,
C:\Program Files
는 8.3 Format On일때 만들어 졌고,
C:\Program Files\AAA\AAA BBB
는 8.3 Format Off일때 만들어 졌다면,
C:\PROGRA~1\AAA\AAA BBB
가 ShortPath로 리턴될 수 있습니다.
공백 파싱으로 데이터와 Path 구별울 위해 Short Path를 쓰는 경우가 있습니다. (RunDLL32.exe)
허나, 앞의 경우와 같이 Short Path에도 공백이 가능하므로,
되도록 ShortPath의 공백 유무를 신뢰하지 맙시다.
를 하면,
C:\PROGRA~1\AAA\AAA~1
이 리턴될 것으로 기대되지만, 실제로,
C:\PROGRA~1\AAA\AAA BBB
가 리턴될때가 있습니다.
이는,
http://technet.microsoft.com/en-us/library/cc959352.aspx
에 기인한 것으로, 8.3 Format Off를 사용자가 할 수 있도록 OS에서 제공하였습니다.
즉,
C:\Program Files
는 8.3 Format On일때 만들어 졌고,
C:\Program Files\AAA\AAA BBB
는 8.3 Format Off일때 만들어 졌다면,
C:\PROGRA~1\AAA\AAA BBB
가 ShortPath로 리턴될 수 있습니다.
공백 파싱으로 데이터와 Path 구별울 위해 Short Path를 쓰는 경우가 있습니다. (RunDLL32.exe)
허나, 앞의 경우와 같이 Short Path에도 공백이 가능하므로,
되도록 ShortPath의 공백 유무를 신뢰하지 맙시다.
'프로그래밍 > Win32' 카테고리의 다른 글
Vista에서 Crash Dump 파일 만들기 (0) | 2009.10.06 |
---|---|
non-MFC에서 손쉽게 Memory Leak 발견하고 해결하기 (0) | 2009.09.24 |
.exe에 Manifest 추가 (0) | 2009.09.22 |
MAX_PATH가 넘어가는 Path 생성하기 (0) | 2009.09.14 |
DLL Main과 Class 생성자, 파괴자의 호출 순서 (0) | 2009.09.14 |