This is an update.... using a different poster's thread answer.... I can now get the insertion and removal of the SD card reader.... I still cannot get the card insertion/removal. Since its frustrating when people do not post full code examples when they are looking help, i will offer this for code for those of you that solely need to detect a USB device insertion/removal, even though it does not do what i need ....... static /*const*/ GUID GUID_DEVINTERFACE_USB_DEVICE = { 0xA5DCBF10L, 0x6530, 0x11D2, { 0x90, 0x1F, 0x00, 0xC0, 0x4F, 0xB9, 0x51, 0xED } }; bool CTestSdcardDlg::DoRegNote() { DEV_BROADCAST_DEVICEINTERFACE devInter; ZeroMemory(&devInter, sizeof(devInter)); devInter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE); devInter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; devInter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE; if(RegisterDeviceNotification(g_hWnd, &devInter, DEVICE_NOTIFY_WINDOW_HANDLE) == NULL) { int i = GetLastError(); int j = 5; } return true; } LRESULT CTestSdcardDlg::WindowProc (UINT uMsg, WPARAM wParam, LPARAM lParam)//HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ) { switch (uMsg) { case WM_DEVICECHANGE: // Initialize the window. AfxMessageBox(_T("Test catch")); break; default: break; } return CDialog::WindowProc(uMsg, wParam, lParam); }