Detecting USB Insertion / Removal Events in Windows using C++
There is a MSDN sample specifically for your case, in native code.
Registering for Device Notification
Better to do it this way than via WMI.
I followed your "new approach" and also found that OnDeviceChange wasn't being called. The problem was that there was no message loop because it was a Console app. Calling the following function at regular intervals fixed it.
void check_for_device_change()
{
MSG msg;
const int val = PeekMessage( &msg, 0, 0, 0, PM_REMOVE );
if( val > 0 )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
}
Create a dummy window that does nothing but wait for WM_DEVICECHANGE
and register that window using RegisterDeviceNotification
. WMI is an overkill here, IMHO.