Безопасное извлечение запоминающих устройств для USB
-
- Posts: 71
- Joined: Tue 29 Dec, 2009 19:16
Безопасное извлечение запоминающих устройств для USB
Far Manager, version 2.0 (build 1302) x86. (Shift-Del в меню выбора диска)
Заметил несколько опережающую работу данной фичи, а именно:
после нажатия Shift-Del на USB-диске выскакивает диалог
╔════════ Device Removal ═══════╗
║ Do you want to remove the device ║
║ Запоминающее устройство для USB ║
║ ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ ║
║ (disk(s): ХХХ:) ║
║ Remove Cancel ║
╚═══════════════════════════╝
и, если ничего не выбирать - в течение 2-3 секунд девайс, тем не менее, оказывается извлечённым.
Заметил просто потому, что недавно поставил USB Safely Remove, а он чуть информативнее стандартной виндовой извлекалочки - и говорит, что девайс, мол, был отключен.
(т.е. - дискомфорта от такого поведения практически нет - я всё равно девайс извлекать собрался... Но, как-бы - нехорошо действия действовать без команды "ФАС!" )
Потом проверил: да, действительно - нажав ESC или "Cancel" через пару секунд - выбрать диск этого девайса нельзя: он и вправду уже отключен.
Далее проверил на машине без установленной "USB Safely Remove" - картина та-же, проблема не в "USB Safely Remove", а именно в FAR'е.
Заодно проверил на имеющейся версии "Far Manager, version 2.0 (build 1174) x86" - картина та-же... Давно, видимо, сломалось...
Заметил несколько опережающую работу данной фичи, а именно:
после нажатия Shift-Del на USB-диске выскакивает диалог
╔════════ Device Removal ═══════╗
║ Do you want to remove the device ║
║ Запоминающее устройство для USB ║
║ ХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХХ ║
║ (disk(s): ХХХ:) ║
║ Remove Cancel ║
╚═══════════════════════════╝
и, если ничего не выбирать - в течение 2-3 секунд девайс, тем не менее, оказывается извлечённым.
Заметил просто потому, что недавно поставил USB Safely Remove, а он чуть информативнее стандартной виндовой извлекалочки - и говорит, что девайс, мол, был отключен.
(т.е. - дискомфорта от такого поведения практически нет - я всё равно девайс извлекать собрался... Но, как-бы - нехорошо действия действовать без команды "ФАС!" )
Потом проверил: да, действительно - нажав ESC или "Cancel" через пару секунд - выбрать диск этого девайса нельзя: он и вправду уже отключен.
Далее проверил на машине без установленной "USB Safely Remove" - картина та-же, проблема не в "USB Safely Remove", а именно в FAR'е.
Заодно проверил на имеющейся версии "Far Manager, version 2.0 (build 1174) x86" - картина та-же... Давно, видимо, сломалось...
Re: Безопасное извлечение запоминающих устройств для USB
Ну и на этот же счёт добавлю хотелку. Если на панели открыта флешка, то её нельзя извлечь через фаровский Hotplug devices list — пишет The disk is in use or locked by another process. Но через меню дисков это устройство в тот же момент прекрасно извлекается.
Вот и подумалось, раз уж фар может определить, что это он сам устройство и заблокировал, то почему освобождает его только когда извлечение происходит через меню дисков?
Вот и подумалось, раз уж фар может определить, что это он сам устройство и заблокировал, то почему освобождает его только когда извлечение происходит через меню дисков?
Re: Безопасное извлечение запоминающих устройств для USB
элементарная недоработка[e]Bu$ter wrote:Вот и подумалось, раз уж фар может определить, что это он сам устройство и заблокировал, то почему освобождает его только когда извлечение происходит через меню дисков?
на мантис пачт выкладывай
We are the Borg. You will be assimilated.
So Say We All!
So Say We All!
Re: Безопасное извлечение запоминающих устройств для USB
Ну что ж. Я уже нашел костыль который освобождает девайс перед отключением его из меню дисков, попробую вставить его в функцию вызываемую из Hotplug devices list. Если заработает — будет патч :DSkirda wrote:элементарная недоработка
на мантис пачт выкладывай :D
Только нужно седьмой SDK докачать.
Re: Безопасное извлечение запоминающих устройств для USB
Просидел пару часов. Походу дважды собирался всё бросить, но всё таки докопался и нашел простой способ придумал костыль способный пофиксить проблему без лишнего кода.
Уже вроде и патч собрался выкладывать, но успел заметить, что извлечение работает только для левой панели
Ещё через час копания стало понятно, что не смотря на то, что в функции FileList::IfGoHome вызовы GetCurDir и Another->GetCurDir возвращают правильные папки для своих панелей, вызовы SetCurDir происходят из разных мест: для левой панели SetCurDir вызывается для объекта FileList (то, что надо), а для правой панели (всегда) Another->SetCurDir вызывается из объекта Panel, что понятное дело не приводит к смене папки.
Дальше я ничего ломать не стал, ибо чую, что не правильно это.
Вот этот кривой костыль:
Как ещё из этой функции (hotplug.cpp::RemoveHotplugDevice) можно добраться до панелей и если потребуется сменить на них папки?
Уже вроде и патч собрался выкладывать, но успел заметить, что извлечение работает только для левой панели
Ещё через час копания стало понятно, что не смотря на то, что в функции FileList::IfGoHome вызовы GetCurDir и Another->GetCurDir возвращают правильные папки для своих панелей, вызовы SetCurDir происходят из разных мест: для левой панели SetCurDir вызывается для объекта FileList (то, что надо), а для правой панели (всегда) Another->SetCurDir вызывается из объекта Panel, что понятное дело не приводит к смене папки.
Дальше я ничего ломать не стал, ибо чую, что не правильно это.
Вот этот кривой костыль:
Code: Select all
Index: hotplug.cpp
===================================================================
--- hotplug.cpp (revision 3944)
+++ hotplug.cpp (working copy)
@@ -39,6 +39,7 @@
#include "language.hpp"
#include "keys.hpp"
#include "help.hpp"
+#include "filelist.hpp"
#include "vmenu.hpp"
#include "BlockExtKey.hpp"
#include "imports.hpp"
@@ -647,11 +648,13 @@
string strDiskMsg;
wchar_t Disks[256], *pDisk=Disks;
*pDisk=0;
+ FileList fl;
for (int Drive='A'; Drive <= 'Z'; ++Drive)
{
if (dwDriveMask & (1 << (Drive-'A')))
{
+ fl.IfGoHome((wchar_t)Drive);
*pDisk++=(wchar_t)Drive;
*pDisk++=L':';
*pDisk++=L',';
Re: Безопасное извлечение запоминающих устройств для USB
Да никаких проблем, на что тут обижаться. Я прекрасно понимаю, что не в курсе даже и на процент, как и что в фаре устроено. И что шансов на решение проблемы локально, без вникания в механизмы взаимодействия, у меня очень мало. Но попробовать было интересно.
Re: Безопасное извлечение запоминающих устройств для USB
в последних сборках FAR Manager 2 перестал показывать флэшки в списке hotplug устройств и пропала реакция на ShiftDel в списке дисков на диске флэшки.
в винде извлечение отрабатывает без проблем
в винде извлечение отрабатывает без проблем
Re: Безопасное извлечение запоминающих устройств для USB
странно, обновил FAR дома, и дома перестали отображаться Hotplug устройства
при подключенной флэшке и кардридере при этом FAR даже запущен с флэшки. никто не в курсе в чем может быть дело?
повторяется не только на рабочем и домашнем компе, но и на других компах на работе. предыдущие билды показывают Hotplug девайсы без проблем.
без плагинов та же картина.
при этом мульти флэш ридер извлекается, а флэшка - нет реакции.
при подключенной флэшке и кардридере
Code: Select all
╔═══════════════════════ Hotplug-устройства ═══════════════════════╗
║ Запоминающее устройство для USB "Multi Flash Reader USB Device" ║
╚═══════════════════ Редактирование: Del,Ctrl-R ═══════════════════╝
повторяется не только на рабочем и домашнем компе, но и на других компах на работе. предыдущие билды показывают Hotplug девайсы без проблем.
без плагинов та же картина.
при этом мульти флэш ридер извлекается, а флэшка - нет реакции.
Code: Select all
╔═════════════ G:\projects\fardev\unicode_far ═════════════╗╔══════ G:\projects\fardev\unicode_far\Release.32.vc ══════╗
║р Имя │ Имя ║║и Имя │ Имя ║
║.. │cmdline.cpp ▲║.. │ ║
║.svn │cmem.cpp ▓║obj │ ║
║bootstrap │codepage.cpp ▓║Far.exe │ ║
║contrib │config.cpp ▓║Far.exp │ ║
║Include │console.cpp ▓║Far.lib │ ║
║Release.32.vc │constitle.cpp ▓║far.map │ ║
║scripts │copy.cpp ▓║far.pdb │ ║
║SDK │ctrlobj.cpp ░║FarCze.lng │ ║
║tools │cvtname.cpp ░║FarEng.hlf │ ║
║UCD │datetime.cpp ░║FarEng.lng │ ║
║ch ░║FarGer.lng │ ║
║CO ╔═════════════════ Диск ══════════════════╗ ░║FarHun.hlf │ ║
║HA ║ C: жёсткий │ 297,99 Г│ 4 │ ║
║HA ║ D: DVD-RW │ │ ╔══════ Удаление устройства ══════╗ │ ║
║LI ║ E: DVD-ROM │ │ ║ Вы хотите удалить устройство ║ │ ║
║MA ║ F: CD-ROM │ 25,19 М│ ║ Запоминающее устройство для USB ║ │ ║
║ma ║ G: сменный │ │ ║ Multi Flash Reader USB Device ║ │ ║
║ma ║ Z: сменный │ │ ║ (диск(и): Z:) ║ │ ║
║RE ╚══════════ Del,Shift-Del,F4,F9 ═══ ╟─────────────────────────────────╢ │ ║
║RE ║ { Удалить } [ Отмена ] ║ │ ║
║REMINDER │edit.cpp ╚═════════════════════════════════╝ │ ║
║SYSLOG-RU │editor.cpp │ ║
║UNICODE │eject.cpp ░║ │ ║
║svn_tag_build.bat │execute.cpp ░║ │ ║
║hook_wow64.c │farexcpt.cpp ░║ │ ║
║adminmode.cpp │farqueue.cpp ░║ │ ║
║CachedWrite.cpp │farrtl.cpp ░║ │ ║
║cddrv.cpp │farwinapi.cpp ░║ │ ║
║CFileMask.cpp │ffolders.cpp ░║ │ ║
║chgmmode.cpp │fileattr.cpp ░║ │ ║
║chgprior.cpp │fileedit.cpp ░║ │ ║
║clipboard.cpp │filefilter.cpp ▼║ │ ║
╟────────────────────────────┴─────────────────────────────╢╟────────────────────────────┴─────────────────────────────╢
║.. Вверх 11.06.10 08:07║║Far.exe 1324 К 11.06.10 08:08║
╚═══════════ 6 017 272 (313) ═══ 2 623 037 440 ════════════╝╚════════════ 9 648 411 (15) ═══ 2 623 037 440 ════════════╝
Re: Безопасное извлечение запоминающих устройств для USB
хм.... сегодня совершенно случайно увидел что одна флэшка отображается и извлекается FAR`ом корректно.
а одна, с которой давным давно хожу и работаю вдруг перестала отображаться и извлекаться FAR`ом....
а одна, с которой давным давно хожу и работаю вдруг перестала отображаться и извлекаться FAR`ом....
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Безопасное извлечение запоминающих устройств для USB
А зачем вообще для флешек использовать безопасное извлечение?
По умолчанию, кеширование сменных накопителей в винде отключено. Больше, кроме сброса буфера на диск, причин использовать "безопасное извлечение" нет.
По умолчанию, кеширование сменных накопителей в винде отключено. Больше, кроме сброса буфера на диск, причин использовать "безопасное извлечение" нет.
Разум когда-нибудь победит.
- zg
- zero-gravity
- Posts: 6037
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Безопасное извлечение запоминающих устройств для USB
в xp питание отключалось.Smitis wrote:А зачем вообще для флешек использовать безопасное извлечение?
- Smitis
- Posts: 1709
- Joined: Fri 18 Mar, 2005 12:51
- Location: Питер
- Has thanked: 23 times
- Been thanked: 55 times
Re: Безопасное извлечение запоминающих устройств для USB
Отключалось? Насклько я понимаю, если отключить питание USB порта, то порт будет недоступен до перезагрузки. Винда просто не сможет определить, подключено ли устройство к порту.в xp питание отключалось.
Да и вообще, если играться с питанием, надо делать не "безопасное отключение", а "безопасное включение".
П.С.
Диспетчер устройств, вкладка "power" для USB устройства показывает исчезновение питания только после физического извлечения устройства.
Разум когда-нибудь победит.