PDA

Показать полную графическую версию : Вызов диалога отключения USB Flash-накопителей


LonerD
15-10-2013, 03:36
Когда в компьютер вставляется USB-накопитель (флешка, док-станция, внешний жёсткий диск), в трее Windows появляется значок "Safely Remove Hardware and Eject Media".
При клике на значок появляется меню для извлечения накопителя.
Подскажите, пожалуйста, каким образом можно вызвать это меню (или аналогичное по функциональности меню с отображением USB-накопителей) из командной строки?

Знаю команду
RunDll32.exe shell32.dll,Control_RunDLL hotplug.dll
Она вызывает окно "Safely Remove Hardware", но его функционал не подходит - не все накопители через это окно не извлекаются (в то же время эти же накопители извлекаются через иконку в трее).
То есть эта команда не является ответом на поставленный вопрос.

Safety1st
15-10-2013, 14:21
А у меня извлекаются... Windows 8.
http://img12.imageshack.us/img12/4880/qxld.png

diagnoz_
15-10-2013, 15:14
но его функционал не подходит - накопители через это окно не извлекаются. »
Почему не извлекаются?Что пишет\происходит?

LonerD
15-10-2013, 17:28
А у меня извлекаются... »
"Извлекаются" ? На вашем скрине видна только флешка. Вы попробовали извлекать РАЗНЫЕ возможные варианты внешних дисков?
У меня через этот диалог успешно отключаются внутренние жёсткие диски, подключённые по SATA-интерфейсу. А вот док-станция Zalman ZM-MH200 U3 и вставленные в неё жёсткие диски, - не извлекаются.

Почему не извлекаются?
Интересно бы знать.


Что пишет\происходит? »
Вот такое происходит:
http://i57.fastpic.ru/big/2013/1015/2e/0c7b9eba663dcf9ab3823efd248b352e.png
Разные варианты нажатий - на device или volume приводят к одному и тому же окну, что "Device is not removable".

Настройки, пробовал их изменить - диски всё-равно не извлекаются:
http://i59.fastpic.ru/big/2013/1015/f1/625ddb0ee68e3f1598ea0d4c6154a7f1.png

Повторюсь - через меню, вызываемое значком в трее те же диски извлекаются без вопросов.
Потому изначальный вопрос в силе - какой командой вызывается это меню?

Побочный вопрос - чем различаются меню в трее и меню, вызываемое вышеназванной командой?

diagnoz_
15-10-2013, 20:09
и вставленные в неё жёсткие диски, - не извлекаются. »
возможно они чем-то заняты в этот момент?если перегрузить ПК и сразу попробовать извлечь, произойдет извлечение?
- обновите драйвер на чипсет материнской платы.
- выполните sfc /scannow в cmd запущенной от имени Администратора и перегрузитесь.После выложите лог CBS.log в архиве по пути C:\Windws\Logs\

LonerD
15-10-2013, 20:55
если перегрузить ПК и сразу попробовать извлечь, произойдет извлечение? »
Нет, не происходит.

возможно они чем-то заняты в этот момент? »
Ничем не заняты.
Даже если и предположить, что чем-то заняты (фоновые процессы вдруг работают), - то через трей ведь в тех же условиях извлекаются.
Значит, в системном диалоге, вызываемом через меню в трее, использует какой-то другой метод извлечения. И главный вопрос темы - какой командой вызвать этот системный диалог?

обновите драйвер на чипсет материнской платы. »
Не считаю это хорошей идеей. Год система проработала без нареканий с тем драйвером, который установился вместе с Windows 8. А золотое правило всегда в силе: "если работает - не трогай". К тому же последний драйвер на оф.сайте производителя материнской платы (плата Asus P6T) датирован летом 2009 года, и подписан как "для Windows 7 x64"; экспериментировать с ним нет никакого желания.

выполните sfc /scannow в cmd запущенной от имени Администратора и перегрузитесь. После выложите лог CBS.log в архиве по пути C:\Windws\Logs\ »
Прикрепил лог к сообщению.

diagnoz_
15-10-2013, 22:41
Лог вроде как чистый после восстановления и перезагрузки.

Safety1st
17-10-2013, 08:35
А у меня извлекаются... »
"Извлекаются" ? На вашем скрине видна только флешка. Вы попробовали извлекать РАЗНЫЕ возможные варианты внешних дисков?
А теперь внимательно читайте, что сами написали:
Она вызывает окно "Safely Remove Hardware", но его функционал не подходит - накопители через это окно не извлекаются.
Флешка - это накопитель. У меня она извлекается. Вывод: накопители извлекаются. Потому в первую очередь я заподозрил проблему с вашей Windows, для этого 'похвастался'.

Цитата diagnoz_:
Почему не извлекаются?
Интересно бы знать. »
Потому что для ОС это non-removable устройство. А в трее появляется, потому что подключено по USB (hot-plug bus).
Можете проверить тип диска с помощью команды fsutil fsinfo drivetype X:
И Windows это прямо говорит, а вы не верите ;)

У себя воспроизвёл аналогичную ситуацию, подключив SATA HDD через SATA-to-USB адаптер.
http://img18.imageshack.us/img18/5827/qk9d.jpg

Как Windows определяет тип диска (http://msdn.microsoft.com/en-us/windows/hardware/gg487419.aspx) (блок 'Q. What must I do to trigger AutoRun on my USB storage device?') Для изменения типа нужно перепрограммировать flash-контроллер или перехватывать ответ драйвера usbstor.sys с помощью фильтра драйвера и ставить нужный RMB-бит (например, используя F2Dx1.sys или cfadisk.sys). Но я отвлёкся)

Побочный вопрос - чем различаются меню в трее и меню, вызываемое вышеназванной командой? »'Меню в трее' способно работать со всеми подключаемыми накопителями, 'меню hotplug.dll' - нет. Может by design так сделали?..

И главный вопрос темы - какой командой вызвать этот системный диалог?
После выбора в меню через API вызывается функция HotPlugEjectDevice в библиотеке hotplug.dll ( http://xpdll.nirsoft.net/hotplug_dll.html). В параметрах передаётся, какое устройство извлечь. Наверное, удастся это сделать таким макаром:
rundll32 hotplug.dll,HotPlugEjectDevice <>
Параметры мне подобрать не удалось, в Интернете информацию не нашёл.
Описание функции из Windows 2000 DDK тут (http://read.pudn.com/downloads3/sourcecode/windows/248345/win2k/private/windows/shell/cpls/hotplug/init.c__.htm ).

LonerD
17-10-2013, 14:44
Спасибо.
Похоже, вопрос не имеет решения.
Он уже поднимался на форумах: тут (http://answers.microsoft.com/en-us/windows/forum/windows_7-desktop/how-can-i-launch-safely-remove-hardware-and-eject/79123213-93f2-4a30-a757-8112a03eba3e?msgId=3c5250b6-ab26-496e-be90-f05ed3ec6396) и тут (http://social.technet.microsoft.com/Forums/scriptcenter/en-US/02f6acaa-207a-47aa-9fbc-65426e4c1e5f/programmaticly-launch-safely-remove-hardware-dialog-box-in-windows7?forum=ITCG) и тут (http://www.sevenforums.com/hardware-devices/201268-how-can-i-launch-safely-remove-hardware-eject-media.html) и в других местах...
Но ответа так и не было получено.
Видимо, придётся ограничиться вызовом "Control Panel\Devices and Printers" (хотя там помимо дисков много "лишних" устройств отображается) или сторонними программами.




© OSzone.net 2001-2012