Windowsでドライブの追加・削除を検知する

メッセージ「WM_DEVICECHANGE」を、拾うことでデバイスの変化を取得できます。
ドライブの追加などを知ることが出来ます。
CDの挿入・排出も検出できます。
XPなどの場合は、WM_DEVICECHANGEが定義されていますが、CEの場合は定義されていません。
ただ、実際にはメッセージ自体は飛ぶようなので直値で拾うことが出来ます。
WM_DEVICECHANGE = 0x219

詳しい情報は、MSDNの解説を参照ください。

メッセージの発行についての注意点
MSDNの解説

WindowsXP/2000/CEで確認しました。
サンプル
#include <Dbt.h>
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_COMMAND:
//...
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_DEVICECHANGE: //0x219:
{
TCHAR str[512];

switch(wParam){
case DBT_DEVICEARRIVAL:
_stprintf(str,TEXT("ドライブが追加もしくはディスクが挿入されました。W=0x%x , L=0x%x"),wParam,lParam);
break;
case DBT_DEVICEREMOVECOMPLETE:
_stprintf(str,TEXT("ドライブが削除もしくはディスクが排出されました。W=0x%x , L=0x%x"),wParam,lParam);
break;
case DBT_DEVNODES_CHANGED:
_stprintf(str,TEXT("ドライブがシステムにより追加or削除されました。W=0x%x , L=0x%x"),wParam,lParam);
break;
default:
_stprintf(str,TEXT("デバイスに変化あり。W=0x%x , L=0x%x"),wParam,lParam);
break;
}
MessageBox(hWnd,str,TEXT("確認"),MB_OK);
return TRUE;
}
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}