如何获取所有进程的打开句柄集

时间:2009-10-05 18:34:04

标签: .net windows pinvoke ntfs

我想知道文件是否由任何进程(包括调用者)打开。已经发布了许多建议,这些建议往往围绕着尝试独占打开文件并捕获异常。

在我的实例中,这并没有被证明是一种万无一失的方法。我相信在我的具体情况下我可以通过扫描所有正在运行的进程的File类型的所有打开句柄来获得。

3 个答案:

答案 0 :(得分:1)

一个穷人的方式是从sysinternals shell来处理。我不知道它是否可以分发。它必须以管理员身份运行(我很确定你需要管理员权限才能做你想做的事情)。无论如何,如果你可以只是shell并将输出重定向到一个文件或捕获它的标准输出,那么你只需要解析它的输出来得到你想要的。我在网上做了一个搜索,并没有出现标记r。曾经向他的公用事业公司发布了消息来源。

如果你有一个你分发的应用程序,这显然不是一个好的解决方案,但如果它只是在内部也许这就足够了。

最好的问候, 别

答案 1 :(得分:1)

我认为你不能简单地用.NET和P / Invoke来解决这个问题。您需要访问低级功能。在另一个使用驱动程序开发工具包(DDK)的论坛中查看AdaraCD在此主题中发布的解决方案:

  

Enum HANDLEs for a process

答案 2 :(得分:0)

我记得代码handle.exe有开源,所以你可以使用这个很棒的实用工具作为参考。