Detecting USB drive insertion and removal using windows service and c
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.
Introduction
Detecting USB insertion and removal from a Windows service is different from doing it in a desktop application. A service runs in session 0, so UI-oriented message loops such as WM_DEVICECHANGE are usually the wrong integration point.
For service code, WMI is often the simplest approach. A ManagementEventWatcher can subscribe to Win32_VolumeChangeEvent and react when removable storage appears or disappears without depending on a visible window.
Use a Service-Friendly Detection Mechanism
Desktop examples often rely on window messages. In a background service, WMI tends to be easier to host and reason about.
The two event types you usually care about are:
- '
2for insertion' - '
3for removal'
That gives you a clean starting point for drive-letter based USB storage events.
Create Watchers in the Service Lifecycle
The service should create its watchers in OnStart and dispose them in OnStop:
This is a good baseline because it matches the service lifecycle cleanly and does not depend on any interactive session state.
Filter for Removable Media
Not every volume event is a USB stick. If your service should react only to removable media, verify the drive type before doing real work.
Use that check inside the event handler before starting downstream logic such as scanning, copying, or indexing files.
Keep the Callback Lightweight
The WMI callback should not do heavy work directly. Treat it as a signal, then queue background processing:
This matters because long-running event handlers can make service behavior unpredictable when several devices are connected or removed in quick succession.
Operational Concerns
A Windows service should always log enough detail to diagnose startup problems, permission issues, and watcher failures. Event Log is a good default because it is available even when there is no UI.
Also decide what you really mean by detection. Some systems care about mounted volumes with drive letters. Others care about any USB mass storage device, even before it becomes usable as a filesystem. Those are related but different monitoring problems.
Common Pitfalls
- Using
WM_DEVICECHANGElogic that depends on a window handle inside a service. - Doing long-running file operations directly in the WMI event callback.
- Assuming every volume event is removable USB media.
- Forgetting to stop and dispose watchers when the service stops.
- Logging too little to diagnose service startup and hardware-event issues.
Summary
- Windows services should usually detect USB storage through WMI rather than UI window messages.
- '
Win32_VolumeChangeEventis a practical event source for insert and remove detection.' - Filter for removable media if the service should ignore non-USB volume changes.
- Keep event handlers small and hand off real work to background processing.
- Add proper logging and watcher cleanup so the service behaves predictably.
Related reading
- Determine if ASP.NET application is running locally
- Determine what resource was not found from Error from server NotFound the server could not find the requested resource
- DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled
- DevOps CI/CD pipelines broken after Kubernetes upgrade to v1.22
- Determine .NET Framework version for dll
- Determine via C whether a string is a valid file path
- diff between whats active on cluster versus kustomize
- Difference between annotations and labels in Kubernetes?

System Design Fundamentals
Build a strong foundation in designing scalable, reliable distributed systems.
View the courseTrack what you have practised
A free account saves your progress, solutions and study plan across every problem on Codemia.
System Design practice on Codemia
Work through 120+ system design problems with detailed solutions, from rate limiters to multi-region storage.