我想知道是否可以在 c# 中枚举文件句柄,也许使用 Win32API?对于窗口和进程句柄,这很容易完成,但对于文件句柄似乎是不可能的。
虽然 提供了一些功能NtQuerySystemInformation
,但正在逐步淘汰,因此不建议使用这种方法。
我想知道是否可以在 c# 中枚举文件句柄,也许使用 Win32API?对于窗口和进程句柄,这很容易完成,但对于文件句柄似乎是不可能的。
虽然 提供了一些功能NtQuerySystemInformation
,但正在逐步淘汰,因此不建议使用这种方法。
好吧,您知道这是可能的,SysInternals 的 Handle 实用程序可以做到这一点。NtQueryInformation 不会被淘汰,它是 Win32 和“真实”操作系统之间必不可少的低级接口。
然而,永远不会发生的是允许迭代句柄的 NtQueryInformation 参数将被记录。因为它不会停在那里,一些布偶将使用它来调用她/他不想被锁定的文件的 CloseHandle()。这是销毁硬盘内容的好方法。
拥有该句柄的进程不知道该句柄已关闭。它只会继续写入,可能完全忽略来自 WriteFile() 的“它不起作用”返回代码。在程序打开另一个句柄之前这是无害的,得到与之前关闭的相同的值。现在它开始将垃圾(用于前一个句柄)和新数据的混合写入句柄。彻底破坏它正在写入的任何内容。如果这类似于关键任务数据库,请启动备份磁带。
您可以调用 sysinternal 的Handle并解析结果,或者编写文件系统驱动程序(可能是多年的努力,不能在 C# 中完成)
我在这里找到了一个使用 C# 中的名称列出文件句柄的工作示例...
向下滚动到最后一个线程并点击那里的链接。请注意,下载代码后,注释是法语的。碰巧我正在学法语,所以我可以理解其中的大部分内容。