枚举C#中的文件句柄

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

虽然NtQuerySystemInformation提供了一些function,但这是逐步淘汰的,因此不建议使用这种方法。

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

然而,永远不会发生的是,将记录允许迭代句柄的NtQueryInformation参数。 因为它不会就此停止,所以一些muppet将使用它来调用他/她不想被锁定的文件上的CloseHandle()。 这是破坏硬盘内容的一种非常好的方法。

拥有句柄的进程不知道句柄是否已关闭。 它将继续写入它,可能完全忽略WriteFile()中的“它没有工作”返回代码。 在程序打开另一个句柄之前,这是无害的,获得与先前关闭的值相同的值。 现在它开始编写垃圾(用于前一个句柄)和新数据到句柄的混合。 彻底摧毁它所写内容的内容。 如果这就像任务关键型数据库那样,请调整备份磁带。

你可以调用sysinternal的Handle并解析结果,或者编写一个文件系统驱动程序 (可能需要多人工作一年, 不能在C#中完成 )

我找到了一个列举文件句柄的工作示例,其中包含C#中的名称…

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

向下滚动到最后一个post,然后点击那里的链接。 并且预先警告,一旦您下载代码,评论将使用法语。 恰恰相反,我正在服用法语,所以我可以理解它的大部分内容。