Программное отключение носимых USB Flash дисков в Windows
| Автор: |
Александр Бельченко |
| Дата: |
31 января 2006 |
Простой рецепт, описывающий программное отключение (размонтирование)
USB Flash дисков в Windows 2000/XP из командной строки.
По роду моей работы мне часто приходится переносить данные между компьютерами
на USB Flash дисках (флэшках). Часто при этом я работаю на нескольких разных системах:
как Windows, так и Linux. Эти системы имеют разные внутренние подходы
к реализации подключения и отключения таких дисков.
Так в Linux для подключения и отключения флэшек используются специальные команды
управления файловой системой mount и umount. В русской кальке процесс
подключения флэшки называют монтированием, а процесс отключения
соответственно размонтированием.
Windows отличается большей услужливостью по отношению к пользователю: при
подключении флэшки к USB разъему она обнаруживается системой Plug-n-Play и
автоматически "монтируется" в файловую систему. Для безопасного отключения
флэшки вам необходимо провести некоторые пассы руками и "мышкой", щелкнув по
иконке с зеленой стрелкой в лотке рядом с часами и указать какую флэшку вы
хотите отключить:
Подход, реализованный в Linux позволяет программисту более гибко управлять
работой с флэшками. Подход, реализованный в Windows, ориентирован на удобства
простых пользователей. Все в соответствии со знаменитой статьей Джоэля
Спольски "Biculturalism".
Впрочем ОС Windows устроена достаточно хитро и запутано, и в ней практически
все, что можно сделать мышкой, можно сделать и программными средствами,
используя соответствующие функции API. Проведя соответствующий поиск в
интернете и в MSDN можно найти искомую информацию, и, в частности, готовую
консольную программу (с исходными текстами) deveject (автор Matthias
Withopf).
На основе этой программы я сделал для себя удобный эквивалент umount,
обвернув вызов deveject в batch-файл примерно следующего содержания:
full\path\to\deveject.exe -EjectDrive:%1
Сохранив такой файл с именем umount.bat и поместив его в каталог, который
перечислен в переменной окружения PATH, я получил возможность из командной
строки или даже из make-файлов отключать флэшку в нужный момент:
C:\> umount g:
C:\>D:\user\app\deveject\deveject.exe -EjectDrive:g:
DevEject 1.0 2003 c't/Matthias Withopf
Ejecting 'Универсальный том' [STORAGE\REMOVABLEMEDIA\7&3386ABF6&0&RM]...ok.
1 device(s) ejected.
Вызывать команду следует с указанием в качестве аргумента имени флэш-диска
(обязательно после буквы диска нужно указывать двоеточие — например, g:).
Данный рецепт имеет некоторые ограничения:
- Если на флэш-диске открыты файлы или просматриваются каталоги, то попытка
отключить флэш-диск будет неудачной. В этом случае нужно убедиться, что все
файлы и каталоги закрыты и попробовать еще раз.
- Если ваша флэшка разбита на несколько логических дисков, то отключить
только один из них не получится. Отключать такие флэшки можно, используя
утилиту deveject с ключом командной строки -EjectId.