КБ>А если бы пользовался еще чем-нибудь другим то возможно бы знал что проблема не специфична для винды.
Эээ... Ну вот я пользуюсь Линуксом. Там нет такой проблемы
Ну то есть ты можешь держать флешку, если какой-то конкретной программой (например редактором) открыл файл на флешке.
Но редактор закрыл, — флешка отмонтировалась.
Так чтобы ОС сама неизвестно почему держала флешку — нет такого.
КБ>Может быть там есть какие-то технические препятствия? 🤔 Да не, не может такого быть.
Ну, раз такие проблемы в Линуксе решены, значит они решаемы.
Течёт вода Кубань-реки куда велят большевики.
Re[8]: Когда же винда научится извлекать устройства?
Здравствуйте, Pavel Dvorkin, Вы писали: PD>Странно. Попробуй поищи по D:\$. И убедись, что в заголовке PE есть Administrator.
Да всё есть. И если он по "D:\" не находит, то по "D:\$" и подавно не найдёт. PD>C $ начинаются имена метафайлов NTFS (а кстати, там NTFS или FAT ?)
exFAT PD>У меня находит для всех дисков.
Я за тебя очень рад. И по-прежнему не понимаю, что заставляет тебя спорить с очевидным: поиск и показ программ, виновных в игнорировании DBT_DEVICEQUERYREMOVE, должен быть встроен в Windows Explorer и его Safe Remove фичу, а не в разработчитцкие тулзы.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Когда же винда научится извлекать устройства?
Здравствуйте, rFLY, Вы писали:
FLY>Здравствуйте, Privalov, Вы писали:
P>>Когда открыты, то понятно. FLY>Кто-то может думать, что это не блокирует, так как никаких файлов по этому пути не открыто (т.е. раз эксплорер не блокирует, то и это не должно, но это не так).
Эксплорер, кстати, вполне себе блокирует. Но он обрабатывает запрос на извлечение устройства, поэтому при eject все окна эксплорера, которые смотрят на извлекаемый диск, оперативно закрываются. P>>Я иногда смотрю папку из Тотального Командира. Выхожу из нее. Пытаюсь извлечь устройство. Винда не дает. А когда я Командира закрою, тогда все нормально. Что бы это значило, я не понимаю. Винда — десятка.
Надо полагать, что в командире есть какие-то фоновые потоки, которые сканируют активный фолдер, и не успевают отключиться.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[8]: Когда же винда научится извлекать устройства?
Здравствуйте, Константин Б., Вы писали:
КБ>А если бы пользовался еще чем-нибудь другим то возможно бы знал что проблема не специфична для винды. КБ>Может быть там есть какие-то технические препятствия?
Какие же?
КБ>🤔 Да не, не может такого быть. Пользователь винды с таким стажем обязательно о таком знал бы.
Ну расскажите про технические препятствия...
И каждый день — без права на ошибку...
Re[6]: Когда же винда научится извлекать устройства?
Здравствуйте, Marty, Вы писали: M>Ты закрыл окно "проводник". Но проводник никуда не делся, он всё ещё работает. И да, файл может типа и скопировался, но какие-нибудь кеши ещё сбрасываются
Да, бывает, что запись на диск идёт от процесса System.
Кстати, для этого частного сценария тоже было бы невредно сделать реализацию в том самом Safe Remove — чтобы показывало градусник сброса кеша. А не "сиди, проверяй её каждые пять секунд — может, отдаст".
Тем более, что причины не отдавать диск бывают разными, и для них есть разные решения:
1. Выполняется отложенная запись: надо подождать, т.к. принудительное прерывание попортит как минимум файл, а то и всю ФС.
2. Какая-то программа держит открытым файл на запись (winword и helloworld.docx) — нужно сохранить файл, программу закрыть
3. Какая-то программа "смотрит" на фолдер или файл в рид-онли режиме — можно выдёргивать флешку, или принудительно выполнять unmount, или просто инвалидировать хэндлы — всё равно ничего страшного не произойдёт.
Слепо применять какой-то один способ для всех случаев не выходит, а нормального, удобного, и 100% рабочего способа отличить одно от другого нет.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: Когда же винда научится извлекать устройства?
Здравствуйте, Sinclair, Вы писали:
S>Я правильно понимаю, что эта картинка должна означать "ничего не знаю, у меня всё работает"?
Помягче. Без первой части. Я привел пример, что у меня работает, а какие там у тебя процессы — я не знаю, и как говорится, я Вам не скажу за всю Одессу.
PD>>Image: lock.png S>А вот за это положен приз. Действительно, монитор ресурсов смог таки найти того, кто держит хэндл.
S>Неожиданно, что "работающий как часы" ProcExp его так и не увидел, как ни тыкай его носом — даже если в конкретный процесс встать.
Если еще раз повторится, сделай вот что. Возьми из resmon ID этого процесса и посмотри в PE все открытые хендлы этого процесса. Думаю, там что-то найдется. Может, имя не содержит D:
S>Было бы намного проще, если бы это упражнение выполнил не я, а парни из Редмонда. Чтобы при выполнении Eject мне выпадал диалог типа "Ваше устройство забрала и не отпускает подсистема WSL2".
Вообще-то да. Кстати, не знаю, как насчет дисков, но что касается файлов, FAR показывает, почему его нельзя удалить.
Вот только удалить все же не дает. И правильно — нечего Telegram лишать этого файла (хотя я и не знаю, зачем он ему нужен)
With best regards
Pavel Dvorkin
Re[9]: Когда же винда научится извлекать устройства?
На диске NTFS всЁ файлы. И boot sector файл, и MFT файл, и прочие метафайлы. Нет там ничего, кроме файлов.
А в FAT есть области, которые не файлы. Таблица FAT и корневой каталог не файлы.
Поэтому если "занята" именно эта таблица (или ее часть) или корневой каталог, то есть захват, но нет хендла, то PE найти не может. А resmon может, но он о хендлах и не говорит.
PD>>У меня находит для всех дисков. S>Я за тебя очень рад. И по-прежнему не понимаю, что заставляет тебя спорить с очевидным: поиск и показ программ, виновных в игнорировании DBT_DEVICEQUERYREMOVE, должен быть встроен в Windows Explorer и его Safe Remove фичу, а не в разработчитцкие тулзы.
Как ты себе это представляешь ?
WM_DEVICECHANGE message
Return TRUE to grant the request.
Ну вернуло мое приложение TRUE (кстати, DefWindowProc скорее всего TRUE и вернет, иначе все приложения начнут блокировать, даже те, которым все это совсем не интересно и не нужно, и поэтому они явно его не обрабатывают).
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>А в FAT есть области, которые не файлы. Таблица FAT и корневой каталог не файлы. PD>Поэтому если "занята" именно эта таблица (или ее часть) или корневой каталог, то есть захват, но нет хендла, то PE найти не может. А resmon может, но он о хендлах и не говорит.
По идее, такого не может быть. Что такое "занята"? Ты намекаешь, что в винде можно "открыть" каталог, не имея на него хэндла?
PD>Как ты себе это представляешь ?
Прекрасно представляю. PD>WM_DEVICECHANGE message
PD>Return TRUE to grant the request.
PD>Ну вернуло мое приложение TRUE (кстати, DefWindowProc скорее всего TRUE и вернет). Согласен я, согласен...
PD>А хендл не закрыло. Дальше что ?
Ну давай ты сам подумаешь, а?
Ну вот если на WM_QUERYENDSESSION приложение согласилось, а само не стало закрываться, то что мы делаем?
Вообще мне непонятен твой стокгольмский синдром. Ты же вроде бы разработчик, а не маркетолог.
Почему тогда вместо того, чтобы подумать, как решить инженерную задачу, ты предпочитаешь рассуждать о том, что её решать не нужно, невозможно, и вообще она уже решена?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Когда же винда научится извлекать устройства?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Помягче. Без первой части. Я привел пример, что у меня работает, а какие там у тебя процессы — я не знаю, и как говорится, я Вам не скажу за всю Одессу.
Ну так я привёл свою картинку. Какой вывод я должен сделать из твоей?
Кстати — у тебя попытка сделать Eject диску H к чему приводит? К отказу, или все программы быстренько отпускают хэндлы?
PD>Если еще раз повторится, сделай вот что. Возьми из resmon ID этого процесса и посмотри в PE все открытые хендлы этого процесса. Думаю, там что-то найдется. Может, имя не содержит D:
Ну вот теперь оно перестало повторяться. Какой-то уникальный порядок запуска WSL, подключения винта, и попытки его обратно извлечь, вызывает такое поведение.
S>>Было бы намного проще, если бы это упражнение выполнил не я, а парни из Редмонда. Чтобы при выполнении Eject мне выпадал диалог типа "Ваше устройство забрала и не отпускает подсистема WSL2".
PD>Вообще-то да. Кстати, не знаю, как насчет дисков, но что касается файлов, FAR показывает, почему его нельзя удалить.
Диски ничем особенным от файлов не отличаются. И уж если гражданский FAR способен не просто сказать Sharing violation, а указать ФИО виновника, то уж винда-то могла бы как минимум не хуже подсуетиться. PD>Вот только удалить все же не дает. И правильно — нечего Telegram лишать этого файла (хотя я и не знаю, зачем он ему нужен) PD>Image: lock3.png
Ну, всё правильно. Теперь пользователь по крайней мере знает, из какой программы нужно выйти, если ему охота удалить этот файл.
А ведь тоже, наверное, можно было послать пользователя нахрен в Sysinternals и ResMon.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[11]: Когда же винда научится извлекать устройства?
Здравствуйте, Sinclair, Вы писали:
PD>>А в FAT есть области, которые не файлы. Таблица FAT и корневой каталог не файлы. PD>>Поэтому если "занята" именно эта таблица (или ее часть) или корневой каталог, то есть захват, но нет хендла, то PE найти не может. А resmon может, но он о хендлах и не говорит. S>По идее, такого не может быть. Что такое "занята"? Ты намекаешь, что в винде можно "открыть" каталог, не имея на него хэндла?
Для таблицы FAT точно никаких хендлов быть не может. А ее драйвер "открывает", то есть получает доступ к ней.
С каталогами сложнее. Строго говоря, даже в NTFS хендл на каталоги получить нельзя, разве что для backup операций.
Когда же просто работаем с файлами, получаем хендлы на них. На каталог не получаем. Не Unix тут все же.
Как там внутри все же обращаются с каталогами при обычном доступе к файлам — не помню.
S>Ну давай ты сам подумаешь, а?
Я давно уже подумал. Лет так 20 назад, когда разбирался с тем, как устроена Windows
S>Ну вот если на WM_QUERYENDSESSION приложение согласилось, а само не стало закрываться, то что мы делаем?
Ничего. Оно не разрешает закончить сеанс.
Можем его убить в известном тебе диалоге. Но это окончание приложения, а приложения запускаются от УЗ, сессия которого сейчас и закрывается. О том, почему можно разрешить юзеру убивать приложения, а сервисы нельзя, я писал вчера, повторять не буду.
S>Вообще мне непонятен твой стокгольмский синдром. Ты же вроде бы разработчик, а не маркетолог.
Антон, ну зачем такая демагогия ?
S>Почему тогда вместо того, чтобы подумать, как решить инженерную задачу, ты предпочитаешь рассуждать о том, что её решать не нужно, невозможно, и вообще она уже решена?
Вроде об этом тут уже столько понаписано, и мной, и не мной, что еще раз повторяться не буду. И дело тут вовсе не инженерной задаче (ее решить можно), а в последствиях такого решения для конечных юзеров, которые не понимают, когда что можно сделать, а когда нет.
Вот тут я изложил свою точку зрения наиболее цельно
PD>>Помягче. Без первой части. Я привел пример, что у меня работает, а какие там у тебя процессы — я не знаю, и как говорится, я Вам не скажу за всю Одессу. S>Ну так я привёл свою картинку. Какой вывод я должен сделать из твоей?
Что хотя бы в одном случае PE все же показывает
S>Кстати — у тебя попытка сделать Eject диску H к чему приводит? К отказу, или все программы быстренько отпускают хэндлы?
Диск давно в ящике лежит, проверять не хочется.
PD>>Если еще раз повторится, сделай вот что. Возьми из resmon ID этого процесса и посмотри в PE все открытые хендлы этого процесса. Думаю, там что-то найдется. Может, имя не содержит D: S>Ну вот теперь оно перестало повторяться. Какой-то уникальный порядок запуска WSL, подключения винта, и попытки его обратно извлечь, вызывает такое поведение.
Вполне возможно. Я же написал : "Если еще раз повторится"...
S>>>Было бы намного проще, если бы это упражнение выполнил не я, а парни из Редмонда. Чтобы при выполнении Eject мне выпадал диалог типа "Ваше устройство забрала и не отпускает подсистема WSL2".
Это опять хождение по кругу. Написать они могли бы, а вот поручится что неграмотный юзер не натворит потом бед, нельзя.
S>Диски ничем особенным от файлов не отличаются. И уж если гражданский FAR способен не просто сказать Sharing violation, а указать ФИО виновника, то уж винда-то могла бы как минимум не хуже подсуетиться. PD>>Вот только удалить все же не дает. И правильно — нечего Telegram лишать этого файла (хотя я и не знаю, зачем он ему нужен) PD>>Image: lock3.png S>Ну, всё правильно. Теперь пользователь по крайней мере знает, из какой программы нужно выйти, если ему охота удалить этот файл.
Верно. Вот тольо этот неграмотный юзер если вздумает "выходить" из сервиса, то мало ему, возможно, потом не покажется.
Пойми , наконец, что этот вопрос не технический. Технически получить эту информацию ничего не стоит. А вот предпринимать какие-то действия , получив ее, юзеру дать нельзя до тех пор, пока он не станет разбираться как следует в том, что можно делать и что нельзя.
S>А ведь тоже, наверное, можно было послать пользователя нахрен в Sysinternals и ResMon.
Вот туда его и нужно послать. Если он разбирается в PE и умеет искать в ResMon — тогда он может на свой страх и риск что-то и сделать.
А иначе...
System : Отсоединить устройство нельзя, потому что оно занято svchost, PID 1234. Закончить svchost (знаю, что просто так его не убить, но систем?
User, радостно : Да!
Синий экран. Занавес.
With best regards
Pavel Dvorkin
Re[3]: Когда же винда научится извлекать устройства?
Здравствуйте, alpha21264, Вы писали:
A>Эээ... Ну вот я пользуюсь Линуксом. Там нет такой проблемы
А я на винде с подобными проблемами как у ТС не сталкивался ни разу. Я правда не часто пользуюсь флешками, но все же.
Re[5]: Когда же винда научится извлекать устройства?
Здравствуйте, Sinclair, Вы писали:
PD>>Image: lock.png S>А вот за это положен приз. Действительно, монитор ресурсов смог таки найти того, кто держит хэндл.
Ты что, даже не пытался найти прогу которая блокирует?
Re[8]: Когда же винда научится извлекать устройства?
Здравствуйте, Pavel Dvorkin, Вы писали: PD>Что хотя бы в одном случае PE все же показывает
Ну так и у меня он для диска С: дофига всего находит.
PD>Это опять хождение по кругу. Написать они могли бы, а вот поручится что неграмотный юзер не натворит потом бед, нельзя.
То есть без этой информации неграмотный юзер, выдирающий устройство из машины т.к. заколебался ждать, бед не натворит....
Детсад, как он есть, увы
PD>Верно. Вот тольо этот неграмотный юзер если вздумает "выходить" из сервиса, то мало ему, возможно, потом не покажется.
С чего бы вдруг? С каких пор у нас сервисы стали неадекватно реагировать на stop и pause запросы?
PD>Пойми , наконец, что этот вопрос не технический. Технически получить эту информацию ничего не стоит.
Вот именно. PD>А вот предпринимать какие-то действия , получив ее, юзеру дать нельзя до тех пор, пока он не станет разбираться как следует в том, что можно делать и что нельзя.
Что за наивная вера в то, что предпринимать какие-то действия без информации безопаснее, чем информированные?
PD>Вот туда его и нужно послать. Если он разбирается в PE и умеет искать в ResMon — тогда он может на свой страх и риск что-то и сделать.
То есть, Far, по-вашему, действует неправильно?
PD>А иначе...
PD>System : Отсоединить устройство нельзя, потому что оно занято svchost, PID 1234. Закончить svchost (знаю, что просто так его не убить, но систем? PD>User, радостно : Да! PD>Синий экран. Занавес.
Кривляться тебе не идёт.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: Когда же винда научится извлекать устройства?
Здравствуйте, rFLY, Вы писали: S>>А вот за это положен приз. Действительно, монитор ресурсов смог таки найти того, кто держит хэндл. FLY>Ты что, даже не пытался найти прогу которая блокирует?
Пытался. Но ProcessExplorer ничего не видит. Мне не пришло в голову поискать ResMon-ом.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: Когда же винда научится извлекать устройства?
Здравствуйте, rFLY, Вы писали:
FLY>Здравствуйте, alpha21264, Вы писали:
A>>Эээ... Ну вот я пользуюсь Линуксом. Там нет такой проблемы FLY>А я на винде с подобными проблемами как у ТС не сталкивался ни разу. Я правда не часто пользуюсь флешками, но все же.
Как раз флешки у неё извлекаются более-менее нормально, примерно в половине случаев. Залипают обычно всякие SCSI-драйвы.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[10]: Когда же винда научится извлекать устройства?
Здравствуйте, CreatorCray, Вы писали:
PD>>> Кто от нее зависит? CC>На той же вкладке видим что никто не зависит.
Не зависит в смысле "другой сервис", а в смысле "кто с ним взаимодействовал", пайпы открывал и т.п.
С>> и почему нельзя логировать взаимодействие программ с сервисом и показывать — кто же с ним взаимодействовал за последние 10, 30, 60, 1200 минут CC>Потому что это тонны никому нафиг не всравшихся логов, которые жрут дисковое место, память и CPU.
Да неужели никому не всравшихся. То-то каждый прод логами обложен.
Re[12]: Когда же винда научится извлекать устройства?
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>С каталогами сложнее. Строго говоря, даже в NTFS хендл на каталоги получить нельзя, разве что для backup операций.
Один из вариантов получения и использования хэндла директории — мониторинг изменений в ней: CreateFile+FILE_LIST_DIRECTORY/ReadDirectoryChanges, и подозреваю что шеллы вроде FAR и Total Commander используют это для отслеживания изменения в директории.
Re[7]: Когда же винда научится извлекать устройства?