Определить процесс, используя файл
Я пытался выяснить, как программно идентифицировать процесс, который имеет блокировку для определенного файла. Я искал API Win32 и WMI, но пока ничего не могу найти. Я знаю, что это возможно - Sysinternals может перечислить каждый доступ к ресурсам/заблокирован каждым процессом в системе.
Может кто подскажет мне подсказку?
Ответы
Ответ 1
Вы можете использовать handle.exe из Sysinternals.
Что-то вроде:
> handle /accepteula C:\path\to\directory
...
program.exe pid: 1234 type: File 2E4: C:\path\to\directory
...
Благодаря fooobar.com/questions/52051/....
Ответ 2
Если вы можете ограничить себя новыми версиями Windows, Restart Manager может сказать вам у какого процесса открыт файл.
Ответ 3
Из-за того, как работает Process Explorer, я подозреваю, что то, что вам нужно искать, это способ поиска файлов, прикрепленных к данному процессу, и что вам придется вытащить этот список для каждого процесса в системе и найдите файл в нем.
Ответ 4
Пожалуйста, посмотрите
http://windowsxp.mvps.org/processlock.htm
Ответ 5
Вы можете использовать Process Explorer из Microsoft
- Загрузите и распакуйте и запустите Проводник процессов
- Нажмите Найти, а затем нажмите Найти дескриптор или DLL... или нажмите CTRL + F
- Скопировать и вставить путь к заблокированной папке файла
- Нажмите Поиск, вы можете убить процесс из главного окна Проводник
Ответ 6
Я не знаю в Windows, но кому-то может показаться полезным узнать, что в Linux вы можете использовать команду lsof или просто искать по папкам /proc/PROCESS _ID/fd и посмотреть, какой процесс открыл файл.
Ответ 7
WhoLockMe является хорошим расширением проводника Windows.
Ответ 8
Этот article может быть вам полезен.
Кажется, вы вынуждены искать список файлов для каждого процесса в системе, используя недокументированные функции в файле ntdll.dll.