我一直在试图弄清楚如何以编程方式识别锁定特定文件的进程。我已经搜索了 Win32 API 和 WMI,但到目前为止我找不到任何东西。我知道这是可能的 - Sysinternals 能够列出系统上每个进程访问/锁定的每个资源。
任何人都可以给我一个提示吗?
您可以使用Sysinternals 中的 handle.exe。
就像是:
> handle /accepteula C:\path\to\directory
...
program.exe pid: 1234 type: File 2E4: C:\path\to\directory
...
您可以使用Microsoft 的Process Explorer
如果您可以限制自己使用足够新的 Windows 版本,重新启动管理器可以告诉您哪个进程打开了特定文件。
由于 Process Explorer 的工作方式,我怀疑您需要寻找的是一种查找附加到给定进程的文件句柄的方法,并且您必须为系统中的每个进程提取该列表并查找你的文件在里面。
我不知道在 Windows 中,但有人可能会发现知道在 Linux 中,您可以使用lsof命令,或者只是搜索文件夹 /proc/PROCESS_ID/fd 并查看打开文件的进程很有用。
WhoLockMe是一个不错的右键单击 Windows 资源管理器扩展。
这篇文章可能对你有帮助。
您似乎被迫使用 ntdll.dll 中未记录的函数搜索系统上每个进程的文件列表。