private void ListenUSBDisks() { try { OperatingSystem os = Environment.OSVersion; Version vs = os.Version; if (os.Platform == PlatformID.Win32NT && vs.Major == 5 && vs.Minor != 0) { //XP we need to poll ManagementEventWatcher watcher = new ManagementEventWatcher(); WqlEventQuery query = new WqlEventQuery("SELECT * FROM __InstanceCreationEvent WITHIN 2 WHERE TargetInstance ISA 'Win32_LogicalDisk'"); RemovableEventHandler handler = new RemovableEventHandler(); watcher.EventArrived += new EventArrivedEventHandler(handler.PollingArrived); watcher.Query = query; watcher.Start(); } else { //Vista or later no need to poll ManagementEventWatcher watcher = new ManagementEventWatcher(); WqlEventQuery query = new WqlEventQuery("SELECT * FROM Win32_VolumeChangeEvent WHERE EventType = 2"); RemovableEventHandler handler = new RemovableEventHandler(); watcher.EventArrived += new EventArrivedEventHandler(handler.AsyncArrived); watcher.Query = query; watcher.Start(); } } catch (Exception e) { Program.form.ShowErrorDialog(e.ToString()); } }