What it is
USBDLM is a Windows service that gives control over Windows' drive letter assignment for USB drives. Running as service makes it independent of the logged on user's privileges, so there is no need to give the users the privilege to change drive letters.
It automatically solves conflicts between USB drives and network or subst drives of the currently logged on user.
Furthermore you can define new default letters for USB drives and much more.
It works on Windows XP to Windows 10 and Server 2003 to 2019.
When a removable drive (USB flash drive, flash card reader, portable hard drive) is attached for the first time, Windows mounts it to the first available "local" drive letter. If there is a network share on this letter, Windows XP will use it anyway for the new USB drive because since XP network shares are specific to the current user and not visible in the "System" context where the letter is assigned. The USB drive then appears to be invisible. This is fixed by XP-SP3 in most situations.
Windows can save only one letter per drive and one drive per letter. Therefore the assingments often overwrite each other, especially on low letters near the first available ones.
You can change the letter assignments in the Windows Disk Management Console with a lot of mouse clicks but you have to do it again for every new device.
USBDLM can for newly attached USB drives
All functions are applied to USB drives at the moment they are being attached, when the USBDLM service starts up and when a user logs on.
- check if the letter is used by a network share of the currently logged on user and assign the next letter that is really available
- reserve letters, so they are not used for local drives
- assign a letter from a list of new default letters, also dependent on many different criteria as the active user, drive type, connection (USB, FireWire), USB port, volume label, size and others
- extract the letter from the volume label
- assign letters for a specific USB drive by putting an INI file on the drive
- remove the drive letters of card readers until a card is inserted
- show a balloon tip with the assigned drive letter(s)
- define autorun events depending on many different criteria
- activate a basic protection against 'BadUSB' devices; USBDLM can ask on arrival of a USB keyboard or network device if it shall be activated
- many other things, see help file, available online as HTML version too
USBDLM runs as service under Windows XP, Vista, Windows 7/8/10 and all their Server Editions.
Unzip the distribution file (USBDLM.ZIP) file to "C:\Program Files" (a USBDLM folder is included).
Then execute the _edit-ini.cmd which creates or opens the configuration file, the USBDLM.INI. Make some setting now or later, e.g. by entering default drive letters for USB drives in section [DriveLetters].
Then register USBDLM as Windows service and start it by executing the
You can change the USBDLM.INI without restarting the service because it's checked for changes each time a new drive is attached.
You can deregister the USBDLM service by executing the
Both can be done without the message box by using the following USBDLM commandline parameters
It returns Errorlevel 0 on success, 1 on failure.
You can stop and start the installed service by means of the _service_stop.cmd and _service_start.cmd and of course by "net stop USBDLM" / "net start USBDLM".
Running without a configuration USBDLM only prevents that a new drive gets the letter of a network share or a subst drive of the currently logged on user. It remounts then to the next letter that is really available.
USBDLM is configured thru a text file, the USBDLM.INI. The USBDLM.INI is read from the folder of the USBDLM.EXE.
If required, read at Wikipedia how
INI files work.
New default letters for new USB drives (flash or harddrive)
Have a look into the help file USBDLM_ENG.CHM for more details.
If you get the "cannot display the webpage" error then the help file has the NTFS file attribute "downloaded from untrusted source" and Microsoft doesn't trust its own CHM file format. To fix this, right click the USBDLM_E.CHM, select Properties and click "Unblock".
The help file is available online as HTML version too.
The typical 20-in-1 card reader eats one drive letter for each of its slots - if we own a card for or not. USBDLM can remove the reader's drive letters until a media is inserted.
USBDLM assigns then a drive letter as configured. If you need different drive letters for a multislot cardreader, then use the criterion "DeviceType" in a DriveLetters section (MSCR is short for MultiSlotCardReader):
Network drive letters
You can prevent Windows mounting local drives to certain letters by putting them into section NetworkLetters.
This is especially useful for letters of network shares which Windows may assign to USB drives while booting. Do not configure other letters than network, subst and TrueCrypt drives here!
USBDLM can show a balloon tip with information about the drive letter(s) or mount points used for a just attached drive:
There is much more USBDLM can do, just take some time and read the help file...
USBDLM V5 gets Balloontips on removal, here I need translations from the text snippets in French,
Italian, Spanish and Portuguese as USBDLM V4 already has:
- Safely removed
- Unsafely removed
- Network Drive
- Subst Drive
For the complete history check out the help file which is available
online as HTML version too.
V5.5.1 (07 Nov 2021)
V5.5.0 (27 June 2021)
- Bugfix: OnServiceStart and OnServiceStarted did not work since V5.4.9
V5.4.11 (28 Feb 2021)
- Bugfix: On deregistration of the USBDLM service no-letter entries created by USBDLM where not removed, so the drive did not get a drive letter assigned
- Bugfix: Under Windows 8 and 10 OnArrival for Bitlocker drives was executed immediately instead after unlock. Now twice, see Bitlocker.
- Bugix: UsbDriveInfo could not swap or steal drive letters since V5.4.8 because it showed a OK only messagebox instead of Yes/No which is hard to answer with Yes.
- New: USBDLM's balloon-tips and UsbDriveInfo look better under Windows 10 with a display scale > 100% (they are "DPI aware" and therefore no more bitmap-scaled)
V5.4.10 (08 Feb 2021)
- Bugfix: USBDLM crashed when arrival and removal events are triggered in fast succession for the same drive
V5.4.9 (24 Jan 2021)
- Bugfix: USBDLM and UsbDriveInfo crashed when IOCTL_STORAGE_QUERY_PROPERTY returns a
STORAGE_DEVICE_DESCRIPTOR with a SerialNumberOffset of 0xFFFFFFFF
- New: Ignoring partitions with the "NoDefaultDriveLetter" can be overruled by IgnoreNoDefaultDriveLetterAttribute=1 in section [Settings]
V5.4.8 (21 June 2020)
- Bugfix: USBDLM assigned drive letters to GPT system partitions, now they are completely ignored
- Bugfix: After attaching a card reader without a media the first media arrival did not trigger OnArrival
- Bugfix: USB Drive Info's TreeView's context menu did not work on negative mouse coordinates
V5.4.7 (17 Jan 2020)
- New: Command interface can set the "Offline" disk attribute (for forced safe removal in RemoveDrive) and restart a USB port (for RestartSrDev)
- New: Safe removal for Letter=-- is forced when required
- New: USB Drive Info highlights newly arrived and removed devices
V5.4.6 (30 Dec 2019)
- Bugfix: USBDLM V5.4.6 and UsbDriveInfo did not show the USB speed
V5.4.5 (05 June 2019)
- Bugfix: Crashs on user session notifications for so far unseen sessions
- Bugfix: [OnArrival] with system=1 not executed again after change of media
- New: Command interface can attach and detach VHDs (for RemoveDrive)
- New: drive letters depending on the file system
- New: UsbDriveInfo can change the volume serial number and the volumename
V5.4.4 (18 March 2019)
- Bugfix: [OnUserLogon] (still) sometimes executed twice
- Bugfix: UsbDriveInfo crashs
V5.4.3 (17 March 2019)
- Bugfix: Crash on password request in V5.4.3
V5.4.2 (17 February 2019)
- Bugfix: Crash on OnArrival when no user is logged-on
- Bugfix: USB speed in ballontips not shown or wrong on standard hubs in V5.4.2
V5.4.1 (02 September 2018)
- Bugfix: GPT Disk ID was read wrong since V5.4.0
- Bugfix: OnUserActivated was executed twice
- Bugfix: DiskKeepAlive read from sector 0 instead of a random sector
- Bugfix: USB port name wrong on some computers
- New: Eject media is assumed to be safe when the volume was locked up to one second before (workaround for the Windows Explorer not dismounting before eject)
V5.4.0 (26 August 2018)
- Bugfix: Ballontips and AutoRun did not work with VeraCrypt volumes
V5.3.9 (04 July 2018)
- Bugfix: DeviceType Bitlocker did not work since V5.3.0
- Bugfix: %LetterFromLabel% did not work since V5.3.0
- New: UsbDriveInfo show opens handles when safe removal or dismount failed
- New: DeviceType Boxcrypt
V5.3.8 (30 June 2018)
- Bugfix: With NoMediaNoLetter=3 driveletters of CDROM drives witout a media present where removed
- Bugfix: LogFile emptied on config change
V5.3.7 (20 June 2018)
- Bugfix: DeviceTypes TrueCrypt and ReadSharingViolation did not work in V5.3.7
- Bugfix: Variables %FreeSpace%, %FreeSpacePercent% where zero on media arrival
V5.3.6 (06 June 2018)
- Bugfix: Criteria UserName and UserGroup did not work with numbers since V5.3.3
- Bugfix: Deadlock when no USBDLM.INI present since V5.3.0
- New: DiskKeepAlive reads from a random position because reading from sector 0 did not work with some drives
V5.3.5 (13 May 2018)
- Bugfix: In V5.3.5 all sections where evaluated as if UserIsAdmin=1 was there, so for restricted users nothing worked unless UserIsAdmin=0 was there
- Bugfix: AutoRuns executed even the drive was configured in IgnoreDevices section
V5.3.4 (18 April 2018)
- Bugfix: Environment variables in open= lines not expanded since V5.3.3
- Bugfix: Criteria UserGroup was read wrong as "GroupName" since V5.3.0
- Bugfix: Criteria UserGroup did not work with SID names since V5.3.0
- Bugfix: Criteria with drive sizes did not work without a size unit
- Bugfix: DeviceType TrueCrypt not recognized on service start
- Bugfix: BalloonTipsExclude section where tested for presense of a media
- Bugfix: BalloonTipsExclude section where not shown by UsbDriveInfo
- Bugfix: DiskKeepAlive interval ignored the time unit
- Bugfix: Wrong icons in UsbDriveInfo since V5.3.3
V5.3.3 (17 April 2018)
- Bugfix: Crashs on 64 Bit Windows with V5.3.3
V5.3.2 (22 Feb 2018)
- Bugfix: Crashs on 64 Bit Windows 8, 10 and Server 2012, 2016
- Bugfix: DeviceType MultiSlotCardReader has not been set
- Bugfix: Crash on AutoRun with non-active logged on user
- Bugfix: autorun.inf not executed on TrueCrypt volumes
V5.3.1 (21 Feb 2018)
- Bugfix: Determining Volume Serial and Label failed on drives with native 4K sectors
V5.3.0 (18 Feb 2018)
- Bugfix: On AutoRun elevated=1 did not work
V5.2.8 (12 Jan 2017)
- Bugfix: Crash on volume with more than 10 mountpoints
- Bugfix: Crash with very long paths of NTFS mountpoints and SUBST drive target folders
- Bugfix: Color of the BalloonTips under Windows 10 was wrong
- Bugfix: On open=foo.cmd the MD5 check was performed for the CMD.EXE instead of the cmd file
- New: Volume Label is read directly from disk - no more delays caused by the Win32 API call GetVolumeInformation
- New: BadUSB Device Blocking changed: Whitelist is checked first, then the blacklist; This way you can whitelist your good USB keyboard and network devices and blacklist all others (DeviceID=*)
- New: Support for multiple active user sessions (when RemoteSessions=3)
- New: Balloontips and AutoRun for virtual volumes in Remote Desktop sessions
- New: AutoDismout tray icon can be shown in Remote Desktop sessions
- New: UsbDriveInfo can show other logged on users and their virtual drives
- New: UsbDriveInfo shows user group memberships optionally only because in huge organisations it can be hundreds
- New: UsbDriveInfo shows all USB keyboard and network devices
- New: Variables for rounded and exact drive sizes, default is still "smart rounding"; for rounded sizes there are now %SizeRounded%, %VolumeSizeRounded, %FreeSpaceRounded%, %DriveSizeRounded%, %DiskSizeRounded%; and %SizeExact% etc...; The default rounding has been improved and can be customized
- New: Symbolic constants in USBDLM.INI by means of #define lines as in C source code
- New: Instead of asking for a passwort a message box can be shown which the user must answer before using a drive
- New: Balloon tips for BitLocker volumes are shown after unlock by default
- New: Scan and Fix prevention for exFAT too
- New: OnDeviceArrival / Removal got some new criteria
- New: Device specific variables %Class%, %Service% and %Enumerator%
- New: Section BalloonTipsExclude works like OnArrival sections, so there can be multiple sections and all the criteria can be used
- New: Command interface supports "Purge Cache" (discarding the disk cache)
V5.2.7 (7 Sept 2016)
- Bugfix: Crash when attaching a potential BadUSB device and BadUsbWatchKbd=1 and/or BadUsbWatchNet=1 and a LogLevel>=3
- Bugfix: Balloontip texts in French, Italian and Portuguese had damaged accent characters since V5.0
- Bugfix: On arrival of a drive with the mouse pointer over the AutoDismount tray icon the new drive was immediately dismounted and locked, making file criteria and some other things fail
- Bugfix: Occasional crash on startup if many AutoRuns to perform
- Bugfix: Even listed in [IgnoreDevice] USBDLM requested some information from drives as the size
- Bugfix: USBDLM stopped working when more than 256 different volumes where used
- Bugfix: No more font change in UsbDriveInfo's right pane when hitting certain special (e.g. asian) characters
- Bugfix: Correct display of characters outside the system's default ANSI codepage in UsbDriveInfo
- New: UsbDriveInfo show container of VeraCrypt volumes >= V1.18
V5.2.6 (5 Sept 2016)
- Bugfix: Criteria GptDiskIdGuid did not work
- New: Variable %GptDiskIdGuid% with the disk's GPT disk id GUID
V5.2.5 (31 Aug 2016)
- Bugfix: Under Vista+ open= failed to start VBS files with a space in the path
- Neu: Variable %UsbdlmVer% mit der USBDLM-Version
V5.2.4 (22 June 2016)
- Bugfix: opening VBS files USBDLM did not pass parameters
- New: USB Drive Info shows problem codes from the device manager in the tree nodes
- New: Autorun events OnSafeRemoval and OnUnsafeRemoval
V5.2.3 (5 June 2016)
- Bugfix: Since V5.1.7 [OnDeviceArrival] did not work
- Bugfix: SuppressWindowsBalloons=1 did not work on non-english Windows 10
- Bugfix: Ballontip's fadeout effect was broken under Vista/Win7,8,10 with non-classic display
- Bugfix: open= did not work with a bat or cmd file in quotes
- New: Under Windows 10 with SuppressWindowsBalloons=0 USBDLM's balloons for volumes with a drive letter are delayed by 3 Seconds to make the Windows 10 balloon come first; The delay can be changed
- New: Search function in UsbDriveInfo
V5.2.2 (28 May 2016)
- Bugfix: Since V5.2.2 creating USBDLM.LOG backups did not work with LogLevel >= 3
- New: In the log file the date can be written in front of each line (LogShowDate=1)
- New: In the log file timing, loglevel and thread ID can be ommitted (LogShowTech=0)
V5.2.1 (10 May 2016)
- Bugfix: open= added the executable twice instead once as parameter under Vista, Win7,8,10
- New: USBDLM service start/stop a event in the EventLog
- New: Number of USBDLM.LOG backups can be set
V5.2.0 (8 May 2016)
- New: Unwanted EventLog items can be deactivated
V5.1.8 (25 April 2016)
- Bugfix: USBDLM_usr.exe (still) sometimes caused permanent CPU load
- Bugfix: Since V5.0 USBDLM has set WriteCacheEnableOverride=1 into the Registry for newly attached USB drives if there was no UsbWriteCacheEnable configured
- New: EventLog can be written to the LogFile instead
V5.1.7 (07 April 2016)
- Bugfix: USBDLM_usr.exe sometimes caused permanent CPU load, probably since V5.0
- Bugfix: open= did not work with document files since V5.1.3
- Bugfix: USB speed icon not shown on some USB controllers running with other than Microsoft drivers
- Bugfix: Maximum connection speed of USB 2.0 High-Speed devices running at Full-Speed shown wrong as USB 1.1 Full-Speed
V5.1.6 (17 March 2016)
- Bugfix: Since V5.1.5 the PortName criteria did not work again for USB drives
- Bugfix: Several minor issues fixed
- New: OnArrival is triggered on instertion of a media into a CD/DVD drive
V5.1.5 (11 March 2016)
- Bugfix: Since V5.0 USBDLM stoopped assigning drive letters after attaching a drive with a BusType for which there is no section DriveLetters
V5.1.4 (09 March 2016)
- Bugfix: In V5.1.4 crash on balloon tip with NTFS mountpoint
- Bugfix: Since V5.0 settings in the registry did not work
V5.1.3 (07 March 2016)
- Bugfix: In V5.1.3 the Win32 USBDLM.exe was compiled without optimization for "Minimize Size", besides the 100KB bigger USBDLM.exe this made some virus scanners believing to detect a virus
- Bugfix: Since V5.0 the PortName criteria did not work for USB drives
- Rollback: Default for SuppressWindowsBalloons is 1 again; 2 (deactivating Windows balloon tips temporarily) makes the Windows tray icon for "Safely remove Hardware" stop working
V5.1.2 (03. March 2016)
- Bugfix: Occational crashes fixed
V5.1.1 (29. Februar 2016)
- Bugfix: Logdatei angelegt trotz WriteLogFile=0
V5.1.0 (29. Februar 2016)
- Bugfix: AutoDismount-TrayIcon was shown even there is no [AutoDismount] section
V5.0.2 (19 Jan 2016)
- Bugfix: In Abschnitten wie [OnArrival] wurden die Zeilen system, elevated und restricted immer als gleich 1 bewertet, falls vorhanden
- Bugfix: In Abschnitten wie [OnArrival] mit nur einer open= Zeile wurden nur Optionen berwertet die nach der open-Zeile stehen
- Neu: Tray-Icon mit Anzeige des Auto-Dismount-Status
- Neu: DismountOnSleep weckt keine schlafenden Laufwerke mehr auf
V5.0.1 (18 Jan 2016)
- Bugfix: In a USBDLM.INI on an attached drive only Letter= and Letters= worked, but Letter1= etc possibly not
V5.0.0 (17 Jan 2016)
- Bugfix: _edit-ini.cmd failed to create a USBDLM.INI when it had no write privileges; now Admin privileges are requested
- Bugfix: USB speed in the balloon tip was wrong when the USB port number could not be determined, for instance if in the location information there isn't something like Port_#0002.Hub_#0003 or the address value is zero. Now the port number is determined by means of the USB-API.
- Bugfix: The section [NetworkLetters] did not work in V5.0.0 if there was not section [DriveLetters]
- New: _install.cmd and _uninstall.cmd renamed to what they really do: _service_register.cmd and _service_deregister.cmd; _start.cmd and stop.cmd renamed to _service_start.cmd and _service_stop.cmd to fit in the new naming scheme
- New: For sections and values there is no more need for numbering; For unnumbered sections the order of appearence is what counts
- New: Ballontips show in the icon if a USB drive is running at Full-, High-Speed, SuperSpeed or SuperSpeedPlus
- New: Ballontips on removal with information if the removal was safe or not (still need translations for new texts)
- New: Compact balloon tips for multi-slot card readers if only one slot has a media present
- New: Balloontips can be customized way more flexible
- New: AutoDismount
- New: Suppressing Windows Balloontips works under Windows 10
- Bugfix: After a successful request for a password sometimes no drive letter was assigned
- Bugfix: Removal Policy was written to the registry even no OptimizeUsbDrivesForSpeed parameter was configured
Conditions and Prices USBDLM
USBDLM is Freeware for private and educational (schools, colleges, universities) use only.
The students shall outnumber all others. No explicit license is required then, just use it.
Otherwise one licence per computer is required after a 30 day test period even though the software does not expire.
To support admins in schools which are often voluntary workers
I made USBDLM freeware for schools, colleges and universities.
But that's the line I've drawn and even your organization is non profit,
good and important I have to say, it's beyond that line. Ask me for a discount in this case.
I don't ask for donations but some users insist, so
PayPal and BitCoins
Prices with effect from June 2011
(Euro prices are constant, USD prices are floating):
Price per licence
|1 to 9 licences
|10 to 99 licences
|100 to 999 licences
|1000 to 9999 licences
You can order directly at me, I send offer and invoice on request.
An online order isn't available because the KAGI Online Shop closed after 22 years.
The licence is delivered as licence number by eMail or on the invoice. It's not required for the software, the software is not limited in any way and it does not expire.
You can pay an invoice at PayPal.
All licences are not limited in time and valid for future versions too. All updates are free of charge. Purchasers of V1.x, etc are free to use up to V5.x.
last change: 07 Nov 2021
The phone number is here because of the strange german law. Please don't call me, write an eMail instead.