Windows サービスからのリムーバブル メディアの挿入を検出する必要があります。目に見えないウィンドウを使用して、USB サムドライブを正常に検出できますRegisterDeviceNotification
が、SD カードはより困難であることが証明されています。を使用するコードを見つけましSHChangeNotifyRegister
たが、さらに調査したところ、ウィンドウ アプリケーションからしか動作させることができませんでした。
(codeproject から見つかったコード: http://www.codeproject.com/Articles/3946/Trapping-windows-messages?msg=2897423#xx2897423xx )
namespace globals{
SHChangeNotifyEntry shcne[1];
}
...
globals::shcne[0].pidl = NULL;
globals::shcne[0].fRecursive = TRUE;
globals::hNotify = SHChangeNotifyRegister(globals::hwnd, SHCNE_DISKEVENTS,
SHCNE_MEDIAINSERTED | SHCNE_MEDIAREMOVED,
WM_MEDIA_CHANGE, 1, globals::shcne);
私が受け取るエラーは
122 (ERROR_INSUFFICIENT_BUFFER - "システム コールに渡されたデータ領域が小さすぎます。")
このエラーは、呼び出しが同一であるにもかかわらず、私の Win32 ウィンドウ アプリケーション テスト プログラムでは発生しません。
編集: サービスにフラグを登録することでエラー メッセージ (一種) を解決しましたSERVICE_INTERACTIVE_PROCESS
が、WndProc でメッセージをまだ受信していません。
助けていただければ幸いです。