枚举C#中的文件句柄

ste*_*far 7 c# winapi file worker-processes

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

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

Han*_*ant 7

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

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

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


She*_* 蒋晟 0

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