원본 : http://www.debuglab.com/knowledge/diskcopy.html
1.요약
윈도즈에서 제공하는 디스크 복사 및 포맷기능을 호출하는 방법을 소개드리겠습니다.
2.본문
디스크 포맷 기능을 하는 API함수가 존재하는데 이건 Undocument된 내용으로 MSDN에 나오지않고 헤더에도 선언되어있지 않습니다.
함수 Prototype을 선언하면 사용할 수 있습니다.
// SHFormatDrive() undocumented Windows API function extern "C" DWORD WINAPI SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options);
디스크 복사 기능은 Diskcopy.dll의 DiskCopyRunDll()함수를 호출하면 됩니다.
3.예제
// 디스크 포맷
extern "C" DWORD WINAPI SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options);
::SHFormatDrive(m_hWnd, nDrive, -1, 0);
//디스크 복사
void RunDll(HWND hWnd, LPCTSTR pszDllName, LPCTSTR pszFunc, LPCTSTR pszCmdLine)
{
void (__stdcall *pFunction)(HWND, HINSTANCE, LPTSTR, int);
HINSTANCE hLib;
hLib = ::LoadLibrary(pszDllName);
if (!hLib)
{
char pszMsg[256];
sprintf(pszMsg, "%s 파일 로드 중 오류가 발생하였습니다.", pszDllName);
::MessageBox(hWnd, pszMsg, _T("오류"), MB_ICONERROR);
return;
}
pFunction = (void (__stdcall*)(HWND, HINSTANCE, LPTSTR, int))
(GetProcAddress(hLib, pszFunc));
if (pFunction)
pFunction(hWnd, hLib, (LPTSTR)pszCmdLine, SW_SHOW);
else
{
char pszMsg[256];
sprintf(pszMsg, "%s에서 오류가 발생하였습니다.\n%s 항목을 찾을 수 없습니다.",
pszDllName, pszFunc);
::MessageBox(hWnd, pszMsg, _T("오류"), MB_ICONERROR);
}
::FreeLibrary(hLib);
}
void SHCopyDrive(HWND hWnd)
{
::RunDll(hWnd, "Diskcopy.dll", "DiskCopyRunDll");
}
- 2001.08.13 Smile Seo -
"Win32 API" 카테고리의 다른 글
- FTP 로 파일 전송하기 (0)2007/03/15
- [API/SHELL] 프로그램 추가 삭제 / 원도 구성 요소... (0)2007/03/02
- [API/SHELL] 디스크 복사 및 포맷... (2)2007/03/02
- 특정 파일의 Property 창 띄우기 (0)2007/03/01
- 프로그램 한번만 실행하기 (0)2007/03/01

수안이의 컴퓨터 연구실



Leave your greetings.
음... DiskCopyRunDll API는 구글을 통해서 쭉 검색해보니 시그니처가 아예 없는게 아니었더군요. 닷넷 프레임워크 P/Invoke로 호출했을 때 계속 PInvokeStackImbalance MDA 에러가 떨어져서 일본 웹을 검색해보니 string 인자 4개를 받게 되어있더군요. ㅎㅎ
2007/08/05 16:27 [ Permalink : Modify/Delete : Reply ]블로그에 있는 글 잘 보고 갑니다. :-)
아! .NET에서는 그런식으로 구현이 되어있군요. 좋은 정보 감사합니다. ^^
2007/08/07 00:04 [ Permalink : Modify/Delete : Reply ]