void USBHost::DispatchHooks(const DeviceChangeHooks& hooks) { for (const auto& hook : hooks) { INFO_LOG(IOS_USB, "%s - %s device: %04x:%04x", GetDeviceName().c_str(), hook.second == ChangeEvent::Inserted ? "New" : "Removed", hook.first->GetVid(), hook.first->GetPid()); OnDeviceChange(hook.second, hook.first); } if (!hooks.empty()) OnDeviceChangeEnd(); }
/************************************* * MainWndProc **************************************/ LRESULT CALLBACK MainWndProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_DEVICECHANGE: OnDeviceChange ( hwnd, wParam, lParam); break; case WM_DESTROY: ExitProcess(0); return 0; default: return DefWindowProc(hwnd, uMsg, wParam, lParam); } return 0; }
BOOL CPnpEventConsumerWindow::OnDeviceChange(UINT EventType, LPVOID EventData) { switch (EventType) { case DBT_CONFIGCHANGECANCELED: printf("DBT_CONFIGCHANGECANCELED\n"); // no data break; case DBT_CONFIGCHANGED: printf("DBT_CONFIGCHANGED\n"); // no data break; case DBT_DEVNODES_CHANGED: // printf("DBT_DEVNODES_CHANGED\n"); // no data break; case DBT_QUERYCHANGECONFIG: printf("DBT_QUERYCHANGECONFIG\n"); // no data break; case DBT_CUSTOMEVENT: case DBT_DEVICEARRIVAL: case DBT_DEVICEQUERYREMOVE: case DBT_DEVICEQUERYREMOVEFAILED: case DBT_DEVICEREMOVECOMPLETE: case DBT_DEVICEREMOVEPENDING: case DBT_DEVICETYPESPECIFIC: { PDEV_BROADCAST_HDR dbc = static_cast<PDEV_BROADCAST_HDR>(EventData); switch (dbc->dbch_devicetype) { case DBT_DEVTYP_DEVICEINTERFACE: { PDEV_BROADCAST_DEVICEINTERFACE dbcc = reinterpret_cast<PDEV_BROADCAST_DEVICEINTERFACE>(dbc); return OnDeviceChange(EventType, dbcc); } case DBT_DEVTYP_HANDLE: { PDEV_BROADCAST_HANDLE dbch = reinterpret_cast<PDEV_BROADCAST_HANDLE>(dbc); return OnDeviceChange(EventType, dbch); } case DBT_DEVTYP_OEM: { PDEV_BROADCAST_OEM dbco = reinterpret_cast<PDEV_BROADCAST_OEM>(dbc); return OnDeviceChange(EventType, dbco); } case DBT_DEVTYP_PORT: { PDEV_BROADCAST_PORT dbcp = reinterpret_cast<PDEV_BROADCAST_PORT>(dbc); return OnDeviceChange(EventType, dbcp); } case DBT_DEVTYP_VOLUME: { PDEV_BROADCAST_VOLUME dbcv = reinterpret_cast<PDEV_BROADCAST_VOLUME>(dbc); return OnDeviceChange(EventType, dbcv); } } } break; case DBT_USERDEFINED: { _DEV_BROADCAST_USERDEFINED* dbcu = static_cast<_DEV_BROADCAST_USERDEFINED*>(EventData); return OnDeviceChange(EventType, dbcu); } break; default: printf("unknown event\n"); } return TRUE; }