枚举C#中的文件句柄

时间:2010-04-09 23:16:23

标签: c# winapi file worker-processes

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

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

4 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:1)

答案 2 :(得分:0)

你可以调用sysinternal的Handle并解析结果,或写一个file system driver(可能是多人年的努力和can't be done in C#

答案 3 :(得分:0)

我找到了一个列举文件句柄的工作示例,其名称在C#here ...

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

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