8

我想知道是否可以在 c# 中枚举文件句柄,也许使用 Win32API?对于窗口和进程句柄,这很容易完成,但对于文件句柄似乎是不可能的。

虽然 提供了一些功能NtQuerySystemInformation,但正在逐步淘汰,因此不建议使用这种方法。

4

4 回答 4

8

好吧,您知道这是可能的,SysInternals 的 Handle 实用程序可以做到这一点。NtQueryInformation 不会被淘汰,它是 Win32 和“真实”操作系统之间必不可少的低级接口。

然而,永远不会发生的是允许迭代句柄的 NtQueryInformation 参数将被记录。因为它不会停在那里,一些布偶将使用它来调用她/他不想被锁定的文件的 CloseHandle()。这是销毁硬盘内容的好方法

拥有该句柄的进程不知道该句柄已关闭。它只会继续写入,可能完全忽略来自 WriteFile() 的“它不起作用”返回代码。在程序打开另一个句柄之前这是无害的,得到与之前关闭的相同的值。现在它开始将垃圾(用于前一个句柄)和新数据的混合写入句柄。彻底破坏它正在写入的任何内容。如果这类似于关键任务数据库,请启动备份磁带。

于 2010-04-10T01:25:59.370 回答
1

这是 C# http://sourceforge.net/projects/processhacker/的现成类

于 2010-04-10T19:59:59.993 回答
0

您可以调用 sysinternal 的Handle并解析结果,或者编写文件系统驱动程序(可能是多年的努力,不能在 C# 中完成

于 2010-04-10T00:00:45.840 回答
-1

我在这里找到了一个使用 C# 中的名称列出文件句柄的工作示例...

http://social.msdn.microsoft.com/Forums/en-US/csharpgeneral/thread/ac990847-6d04-4ae0-aafe-8355bbc3f769

向下滚动到最后一个线程并点击那里的链接。请注意,下载代码后,注释是法语的。碰巧我正在学法语,所以我可以理解其中的大部分内容。

于 2010-06-11T17:14:27.497 回答