Может ли Windows сказать мне, что использует мой USB-накопитель?
Будучи добропорядочным гражданином, я щелкаю левой кнопкой мыши на значке "Безопасное извлечение устройства" на панели задач и выбираю свой USB-накопитель для отключения.
Тогда я получаю сообщение:
Windows не может остановить ваше устройство тома Generic, потому что оно используется. Закройте все программы или окна, которые могут использовать устройство, а затем повторите попытку позже.
Конечно, будучи операционной системой, она точно знает , какие приложения используют мое устройство. Так почему это не говорит мне?
Или есть способ, который я могу узнать?
10 ответов
Вы можете использовать Sysinternals Process Explorer, чтобы найти дескриптор для любых открытых файлов. Просто выберите Find меню и выберите Find Handle or DLL, В открывшемся диалоговом окне введите букву диска в поле поиска. Результаты поиска должны показывать все файлы, которые открыты с диска и в каком процессе они открыты.
Более простой метод : Windows (по крайней мере, 10, AFAIK) создает запись в журнале событий, когда вы пытаетесь извлечь съемный диск, и вы не можете этого сделать, потому что процесс заблокирован. Два идентификатора события 225 будут отображать идентификатор процесса и имя процесса, ответственного за блокировку.
Шаг за шагом:
1) Запустить просмотрщик событий
2) Откройте "Журналы Windows", затем "Система".
3) Щелкните правой кнопкой мыши "Система" и выберите "Фильтровать текущий журнал"
4) В появившемся диалоговом окне введите "225" (без кавычек), где написано "Все идентификаторы событий".
5) Затем вы увидите все события, связанные с невозможностью извлечения, потому что процесс заблокировал диск.
6) Посмотрите на временные метки всех этих записей и выясните, какие из них относятся к фактическому времени, когда вы пытались извлечь диск.
7) Примите соответствующие меры. Изящное завершение задачи (закрытие программы с блокировкой) в большинстве случаев нормально. Остановка службы поиска Windows также в порядке. Остановка антивирусного сканирования должна быть в порядке (если вы не подозреваете, что у вас есть какие-либо вирусы в то время). Зайдя в диспетчер задач и убив процесс, возможно, не будет в порядке. Как с этим бороться, выходит за рамки этого вопроса.
8) (Сохранить вид ...) на панели "Действия" (в правом кадре) вы можете "Сохранить фильтр в пользовательском представлении ...", чтобы найти его в "Пользовательских представлениях" (в левом кадре над " Журналы Windows ")
Идентификатор процесса:
Имя процесса:
8) Если у вас нет другой записи с именем процесса , системный процесс (идентификатор процесса 4) удерживает ваш диск. Чтобы обойти это, вам нужно перейти к управлению дисками и перевести диск, который вы хотите извлечь, в автономный режим . Если файл находится на вашем загрузочном диске, вы не можете перевести его в автономный режим. В этом случае см. Примечание ниже:
ОБНОВЛЕНИЕ 2018 : я видел такие приложения, как WhatsApp Desktop, сохраняющие дескрипторы на Chrome Canary через системный процесс . Поскольку вы не можете извлечь загрузочный диск (поскольку он используется), решение было использовать другую изящную утилиту Sysinternals , названную Handle . После закрытия программы с заблокированным файлом запустите дескриптор и запустите (в качестве примера) handle64 "Chrome SxS\Application\chrome.exe" чтобы увидеть, присутствуют ли все еще маркеры в файле, который имеет блокировку PID 4. Методом проб и ошибок закрывайте каждую запущенную программу, пока на заблокированном файле больше не останется дескрипторов.
Лучший метод (платный)
Скачайте и запустите SafelyRemove . Он помогает вам извлечь диск и, если он не может этого сделать, показывает, какие процессы заблокированы на нем:
Вы также можете использовать командную строку для запроса журнала Windows, используя wevtutil.exe (начиная с Windows 7), зная, что Windows Kernel-PnP использует событие 225 для регистрации в системе (всегда с идентификатором 4 процесса) отказа от удаления или удаления устройство USB\VID_####&PID_############ (где # обозначают шестнадцатеричные числа).
wevtutil qe System /q:"*[System[(EventID=225)]]" /c:5 /f:text /rd:true
- qe System: запрос событий из системного журнала
- /q: запрос с XPath
EventID=225означает, что система отклонила запрос на удаление- /c:5: количество записей для извлечения (5 здесь)
- / f: текст: формат (по умолчанию xml)
- / rd: true: обратный порядок (сначала самый новый)
Я использую это в пакетном скрипте.
Вот быстрая команда PowerShell, чтобы запросить журнал событий и показать, какое приложение блокирует извлечение диска (у меня работает с Windows 10, возможно, работает и с 7/8)
Get-EventLog -LogName System -after (Get-Date).AddHours(-1) | Where-Object {$_.EventID -eq 225} | Sort-Object TimeGenerated | Format-Table -Wrap
В выводе будут перечислены все экземпляры за последний час, когда система не смогла извлечь диск. Столбец Сообщение показывает процесс, который заблокировал извлечение. В моем примере ниже диспетчер задач был фактически виновником, и я смог удалить его после закрытия диспетчера задач.
PS C:\Users\Jonathan> Get-EventLog -LogName System -after (Get-Date).AddHours(-1) | \Where-Object {$_.EventID -eq 225} | Sort-Object TimeGenerated | Format-Table -Wrap
Index Time EntryType Source InstanceID Message
----- ---- --------- ------ ---------- -------
14692 Sep 07 10:50 Warning Microsoft-Windows-Ke 225 The application \Device\HarddiskVolume4\Windows\System32\Taskmgr.exe with process id 11972 stopped
rnel-PnP the removal or ejection for the device USB\VID_0781&PID_5575\200445301013C111B1A0.
14693 Sep 07 10:50 Warning Microsoft-Windows-Ke 225 The application \Device\HarddiskVolume4\Windows\System32\Taskmgr.exe with process id 11972 stopped
rnel-PnP the removal or ejection for the device USB\VID_0781&PID_5575\200445301013C111B1A0.
Вы можете запустить resmon.exe (через WIN+R), перейти на диск> Активность диска> Сортировать по файлу. Теперь вы можете видеть все файлы, к которым обращается система, и какие процессы обращаются к ним, упорядоченные по пути к файлу (который запускается между прочим) с буквой диска). Может работать не во всех случаях, но это простой подход.
Перезагрузка компьютера кажется "освободить" использование устройства. Также для более быстрого удаления вы можете отключить кэширование Windows в разделе "Оборудование" вашего устройства, иногда Windows займет больше времени, чем ожидалось, чтобы сбросить кэш на внешний диск, и отобразит это сообщение о том, что устройство используется (потому что оно будет Сама винда)
Для меня (Windows 7).
- Нажмите клавишу Windows
- В разделе "Поиск программ и файлов" введите: diskmgmt.msc
- В списке поиска найдите запись и щелкните правой кнопкой мыши - выберите "Запуск от имени администратора".
- Введите учетные данные администратора для запуска "Управление дисками" (при необходимости)
- Найдите оскорбительный USB-накопитель, который не будет извлечен в списке дисков
- Левая панель, правой кнопкой мыши выберите " Извлечь "
- Дескрипторы "следует" закрыть - вы всегда можете дважды проверить в sys innerals process explorer
Примечание. Значок панели задач "Безопасное извлечение устройства и извлечение носителя" больше не отображает USB-диск - только три точки
- Физически удалить диск
Если вы открываете "Мой компьютер", а ваш диск не указан в заголовках "Съемное хранилище", то Windows почему-то рассматривает его как фиксированный системный ресурс. Вам придется размонтировать все разделы на диске.
Если это так, откройте "Управление компьютером", затем перейдите к "Управление дисками". Для каждого раздела на устройстве щелкните правой кнопкой мыши раздел, выберите "Изменить буквы и пути диска" и удалите все буквы дисков, назначенные этому разделу. Как только вы это сделаете, вы должны обнаружить, что функция "безопасного извлечения" работает так, как вы надеялись.
Если вы используете powershell-core (PowerShell 7), вы можете использовать следующее (для удобства чтения ограничено пятью недавними событиями):
Get-WinEvent -MaxEvents 5 -FilterHashtable @{LogName='System';Id=225} | Format-Table -Wrap
Это похоже на ответ Джона , ноGet-EventLogявляется частью старого API Win32 и не поддерживается в powershell-core.Get-WinEventавтоматически сортируется в хронологическом порядке (по убыванию), поэтому дополнительная сортировка также не требуется.
Я пробовал это с помощью Windows 10.
Откройте диспетчер ресурсов, выполнив поиск в начальном поле "Введите здесь для поиска" или с помощью диспетчера задач (щелкните правой кнопкой мыши на панели задач, а затем нажмите диспетчер задач, чтобы открыть его).
В диспетчере ресурсов столбец с именем image используется для отображения имени процесса, а столбец с именем File может использоваться для проверки того, использует ли процесс ваш диск. Например, адрес файла будет
F:/foo/bar.tmpЗатем, если у вашего подключенного USB- накопителя есть буква диска F:, вы можете завершить этот процесс. столбец с именем PID показывает идентификатор процесса.
Чтобы убить процесс: введите CMD или командную строку
taskkill /F /PID pid_number
Если бы USB, о котором сообщалось, что windows используется ... такой же, как и все остальные здесь.
В Windows 10 Ctrl + Alt + Del попадает в диспетчер задач.
Найти с помощью прокрутки - Windows Explorer. и выделить.
Справа внизу - приятная дружественная кнопка "Перезапустить процесс".
Двойная тройная проверка, что "Проводник Windows" - единственное, что выделено.
Щелкните левой кнопкой мыши дружественную кнопку "Перезапустить процесс".
У меня был только один Проводник, у других иногда есть два. Просто отметьте, какой из них возвращается. Попробуйте и закройте / извлеките USB. Мой работал нормально, закройте USB.
Если ваш не извлекает / закрывает, то, вероятно, это был другой проводник. Попробуйте еще раз и перезапустите его. Удачи.
