Обнаружить запрос на извлечение съемного носителя в службе Windows
У меня есть служба Windows, написанная на C# с платформой.NET 2.0, которая использует FileSystemWatcher для мониторинга определенных каталогов на предмет изменений. Некоторые из этих каталогов могут находиться на съемных носителях, таких как USB-накопитель. Когда новый диск подключен к системе, я получаю уведомление через WMI-запрос и могу настроить новый FileSystemWatcher. Все это хорошо работает.
Сложность состоит в том, что я хочу, чтобы пользователь мог извлечь диск с помощью приложения Windows "Безопасное извлечение устройства", но Windows сообщает, что диск занят, потому что я наблюдаю за ним через FileSystemWatcher, и сообщает пользователю, что диск не может быть удален.
Тогда мой вопрос: как моя служба Windows может узнать, когда пользователь запрашивает извлечение, чтобы я мог удалить монитор файловой системы и разрешить выполнение запроса?
1 ответ
Вам необходимо зарегистрироваться, чтобы получать широковещательное событие запроса на удаление устройства (DBT_DEVICEQUERYREMOVE) через API-интерфейс Windows RegisterDeviceNotification, как описано здесь.
Насколько я знаю, нет класса.NET Framework, который бы обернул эту функциональность, поэтому вам придется делать это с длинными руками, используя p/Invoke.