MSDN에 있는 What's New in the Windows API 보다가 VHD 관련한 API가 보여서 포팅해봤다.

VHD 관련 API는 Windows 7 이상에서만 동작한다.
서버는 2008 R2 이상부터

포팅한 헤더 이름은 VirtDisk.h
헤더의 SDK는 v7.0의 것을 이용했다.
MSDN의 예제 링크는 여기
MSDN에 관련 VHD 페이지는 VHD Reference를 참고하면 되겠다.


Example


아아아~ 귀차니즘으로 인한 콘솔보다 못한 UI라니 ㅠ.ㅜ

1. Create

예제에서는 C:\aaa.vhd의 경로에 파일을 생성한다.
현재 예제에서는 사이즈가 256mb로 지정되어 있다.



2. Attach & Detach

VHD를 시스템에 Attach시킨다.
딸깍하는 Windows 효과음이 나면서 처음이라면 가상드라이브 관련 드라이버도 설치가 진행된다.
누르고 자시고 할 것도 없이 그냥 진행된다 -_-;
탐색기에서는 변화가 없으니 제어판의 디스크 관리 항목을 열어보자.


디스크 1이라는 항목이 추가되어 있다.
디스크 1이라고 씌여진 부분에서 마우스 우클릭 후 디스크 초기화를 하면 온라인으로 상태가 변화된다.
256 MB가 씌여진 부분에서 우클릭 후 새 단순볼륨를 누르고 포맷을 진행하면 드라이브가 추가된다.



포맷이 완료되면 위 그림처럼 드라이브가 생성되고 파일을 읽고 쓸 수 있게 된다.
물론 탐색기에서 드라이브처럼 이용할 수 있다.
Detach하면 드라이브가 제거되며 다시 Attach하면 위에서 설정된 드라이브로 바로 마운트된다.


3. 기타 API

CompactVirtualDisk와 MergeVirtualDisk는 예제에서도 실행이 잘 안되서 확인을 못했고 나머지 api는 Attach 혹은 Detach 여부에 따라 동작이 가능했다.



PS

1. MINENUMSIZE 까먹어서 테스트 하다가 삽질 -_-;
http://docwiki.embarcadero.com/RADStudio/en/Delphi_Compiler_Directives_(List)_Index 
컴파일러 지시자 링크

2. MSDN보니 Windows 8에서 API가 몇개(AddVirtualDiskParent 등) 추가됐다 -_-;;;
 어..어이~ 마소~ Windows7도 얼른 지원해주라구.


MSDN Shell관련 API를 찾다가 PathMakeUniqueName 함수를 찾았다.

지난번 프로젝트에서 파일을 새로 만들때 유니크한 파일명을 구하려고 생쑈했던 기억이 나서 살펴봤다.


[MSDN PathMakeUniqueName]
http://msdn.microsoft.com/en-us/library/windows/desktop/bb776476(v=vs.85).aspx 
상세 파라미터나 리턴값은 여기서~


[Delphi]



[C++]



[테스트]


경로에 메일서식.txt 파일 있는 경우
D:\메일\메일서식 (1).txt 리턴

경로에 메일서식.txt, 메일서식 (1).txt가 있는 경우
D:\메일\메일서식 (2).txt 리턴

경로에 메일서식.txt, 메일서식 (1).txt, 메일서식 (3).txt가 있는 경우
D:\메일\메일서식 (2).txt 리턴


[ETC]
PathMakeUniqueName 함수는 인자중 Template를 이용한 방법이고 실제 존재하는 파일을 기반으로 유니크한 파일명을 얻어내는 PathYetAnotherMakeUniqueName 함수도 있다.

http://msdn.microsoft.com/en-us/library/windows/desktop/bb776479(v=vs.85).aspx 


+ Recent posts