N>При этом флешку держат явно сервисы самой ОС, всякие индексаторы и превьютеры. Они не сильно важны и критичны. Я хочу, чтобы при невозможности извлечь устройство выдавался список процессов, которые её держат. Если это пользовательские программы, то их сможет закрыть сам пользователь — ему решать. Если сервисы, то предложение их прервать для извлечения. Как лучше прервать — решение за Майкрософт, это же её сервисы. Не получилось прервать — пользователь сам, зная имена сервисов, может найти их в диспетчере задач и прервать ручками.
Выше уже писали, что совсем необязательно прерывать процессы. Достаточно принудительно отмонтировать ФС с инвалидированием хэндлов.
Нормальная программа должна быть устойчива к инвалидации (обычный сценарий — сетевой каталог отвалился). Тем более Вы сам пишете, что все эти индексаторы и превьюеры Вам не критичны.
Другое дело, что у MS отмонтирование как-то странно сделано
Есть команда mountvol <mount_point> /p
/P Removes the volume mount point from the specified directory,
dismounts the volume, and makes the volume not mountable.
You can make the volume mountable again by creating a volume
mount point.
C:\Users\Myuser>mountvol e:\ /p
The volume is still in use. A force dismount was issued and current handles
to the volume have been invalidated.
Вроде то, что нужно, но тем не менее safely remove всё равно не отрабатывает (проверял на виртуалке).