unsafe public UsbAlarm(IntPtr windowHandle) { DEV_BROADCAST_DEVICEINTERFACE filter = new DEV_BROADCAST_DEVICEINTERFACE(); filter.dbcc_size = DEV_BROADCAST_DEVICEINTERFACE.Size; filter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; foreach (Guid guid in GUID_DEVINTERFACE_LIST) { filter.dbcc_classguid = guid; DEV_BROADCAST_DEVICEINTERFACE *ptr = &filter; IntPtr ptrStruct = new IntPtr(ptr); IntPtr hDevNotify = RegisterDeviceNotification(windowHandle, ptrStruct, DEVICE_NOTIFY_WINDOW_HANDLE); if (hDevNotify == IntPtr.Zero) { Debug.WriteLine("Failed to register: " + guid); } else { _notifications.Add(hDevNotify); } } }
static extern unsafe IntPtr RegisterDeviceNotification(IntPtr hRecipient, DEV_BROADCAST_DEVICEINTERFACE *NotificationFilter, UInt32 Flags);