Ответ 1
Используйте Process Explorer из Sysinternals Suite, функции Find Handle или DLL, которая позволит вам искать процесс с помощью этот файл открыт.
Один из моих любимых инструментов для Linux - lsof - настоящий швейцарский армейский нож!
Сегодня мне стало интересно, какие программы в WinXP-системе имеют определенный файл. Есть ли эквивалентная утилита для lsof? Кроме того, этот файл был связан с сетевым ресурсом, поэтому я не уверен, что это осложняет ситуацию.
Используйте Process Explorer из Sysinternals Suite, функции Find Handle или DLL, которая позволит вам искать процесс с помощью этот файл открыт.
Эквивалент lsof -p pid
- это комбинированный вывод из дескриптора sysinternals и listdll, т.е.
handle -p pid
listdlls -p pid
вы можете узнать pid с sysinternals pslist
.
Попробуйте Обработать. Filemon и Regmon также отлично подходят для выяснения того, что программа duce foo делает вашу систему.
Попробуйте Unlocker.
У сайта Unlocker есть отличная диаграмма (прокрутка вниз после ссылки), которая показывает сравнение с другими инструментами. Очевидно, что такие сравнения обычно предвзяты, поскольку они, как правило, пишутся автором инструмента, но в таблице, по крайней мере, перечислены альтернативы, чтобы вы могли попробовать их для себя.
Если файл является .dll, вы можете использовать приложение командной строки TaskList, чтобы узнать, чей доступ он открыт:
TaskList /M nameof.dll
Один эквивалент lsof может быть объединен с выходом из дескриптора Sysinternals и listdll, т.е.:
c:\SysInternals>handle
[...]
------------------------------------------------------------------------------
gvim.exe pid: 5380 FOO\alois.mahdal
10: File (RW-) C:\Windows
1C: File (RW-) D:\some\locked\path\OpenFile.txt
[...]
c:\SysInternals>listdlls
[...]
------------------------------------------------------------------------------
Listdlls.exe pid: 6840
Command line: listdlls
Base Size Version Path
0x00400000 0x29000 2.25.0000.0000 D:\opt\SysinternalsSuite\Listdlls.exe
0x76ed0000 0x180000 6.01.7601.17725 C:\Windows\SysWOW64\ntdll.dll
[...]
c:\SysInternals>listdlls
К сожалению, вам нужно "запустить как администратор", чтобы иметь возможность использовать их.
Также listdlls и дескриптор не создают непрерывную табличную форму, поэтому фильтрация имени файла скроет PID. findstr /c:pid: /c:<filename>
должно быть очень близко к обеим утилитам, хотя
c:\SysinternalsSuite>handle | findstr /c:pid: /c:Driver.pm
System pid: 4 \<unable to open process>
smss.exe pid: 308 NT AUTHORITY\SYSTEM
avgrsa.exe pid: 384 NT AUTHORITY\SYSTEM
[...]
cmd.exe pid: 7140 FOO\alois.mahdal
conhost.exe pid: 1212 FOO\alois.mahdal
gvim.exe pid: 3408 FOO\alois.mahdal
188: File (RW-) D:\some\locked\path\OpenFile.txt
taskmgr.exe pid: 6016 FOO\alois.mahdal
[...]
Здесь мы видим, что gvim.exe - это открытый файл.
Если вы щелкните правой кнопкой мыши значок "Компьютер" (или "Мой компьютер" ) и выберите "Управление" во всплывающем меню, которое приведет вас к консоли управления компьютером.
Там, в разделе "Системные инструменты\Общие папки", вы найдете "Открыть файлы". Вероятно, это близко к тому, что вы хотите, но если файл находится в сетевом ресурсе, вам нужно будет сделать то же самое на сервере, на котором находится файл.
Существует программа "OpenFiles", которая, как представляется, является частью окон 7. Кажется, что она может делать то, что вы хотите. Он может отображать файлы, открытые удаленными пользователями (через общий доступ к файлам), и после вызова "openfiles/Local on" и перезапуск системы, он должен показывать файлы, открытые локально. Говорят, что последнее имеет штрафы за производительность.
Используйте Process Explorer, чтобы найти идентификатор процесса. Затем используйте Handle, чтобы узнать, какие файлы открыты.
Например, handle -p
Мне нравится этот подход, потому что вы используете утилиты самой Microsoft.
В OpenedFilesView в меню "Параметры" есть пункт меню "Показать сетевые файлы". Возможно, с включенной поддержкой, вышеупомянутая утилита может быть использована.