우리는 흔히 디스크 드라이브 명이 C나 D 같이 단일 문자로 되어 있다고 생각할지 모르지만
윈도우는 내부적으로 UNC(universal naming convention)를 따라서 사용한다.
이 UNC는 "\\?\"를 접두어로 사용한다. 더 자세한 내용은 MSDN의 Naming Files, Paths, and Namespaces를 참고!
이 글은 네이버 지식iN에 올라왔던 "볼륨명으로 드라이브번호 알아내는법..."라는 질문으로 시작되었다.
=> http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=1040101&docId=157619577
내가 만든 코드 (GetVolNameByDriverName)
: 입력 - 단일 드라이브 명. 예) C
: 출력 - UNC이름. 예) \\?\Volume{c51cfc1f-7025-11e1-b23a-806d6172696f}\
#include <windows.h>
#include <tchar.h>
#include <stdio.h>
BOOL
GetVolNameByDriverName(
__in TCHAR drive,
__out_ecount(cchBufferLength) LPTSTR lpszVolumeName,
__in DWORD cchBufferLength);
void _tmain(int argc, TCHAR *argv[])
{
TCHAR volName[MAX_PATH];
BOOL bSuccess = GetVolNameByDriverName(TEXT('C'), volName, MAX_PATH);
if(bSuccess) _tprintf(TEXT("%s\n"), volName);
else _tprintf(TEXT("Error : %d\n"), GetLastError());
}
// If the function succeeds, the return value is nonzero.
BOOL GetVolNameByDriverName(TCHAR drive, LPTSTR lpszVolumeName, DWORD cchBufferLength)
{
TCHAR szVolumeMountPoint[3+1];
wsprintf(szVolumeMountPoint, TEXT("%c:\\"), drive);
return GetVolumeNameForVolumeMountPoint(szVolumeMountPoint, lpszVolumeName, cchBufferLength);
}
순전히 윈도우 API 함수 GetVolumeNameForVolumeMountPoint를 래핑한 것에 불과하다.
이 함수의 첫 번째 인자인 볼륨 마운트 포인트는 "X:\"와 같이 역슬래쉬('\')로 끝나야 한다는 조건이 있기에 실수를 줄여줄 수 있는 래퍼 함수인 것이다.
참고: Enumdisk1.exe: Enumdisk Sample for Enumerating Disk Devices
MSDN::SetupDiGetDeviceRegistryProperty function
'Programing' 카테고리의 다른 글
개발도구 - 이슈관리, CI (0) | 2013.01.29 |
---|---|
Zen Coding (0) | 2012.10.28 |
그래프 그리기 (0) | 2012.10.15 |
Comet 부하테스트 (0) | 2012.09.21 |
Comet 서블릿 처리하기 (0) | 2012.09.21 |