我想知道是否可以枚举c#中的文件句柄,也许使用Win32API。这对于窗口和进程句柄很容易实现,但似乎文件句柄不可能。
虽然NtQuerySystemInformation提供了一些功能,但这已被逐步淘汰,因此不建议使用这种方法。
答案 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 ...
向下滚动到最后一个帖子,然后点击该链接。并且预先警告,一旦您下载代码,评论将使用法语。恰恰相反,我正在服用法语,所以我可以理解它的大部分内容。