我想知道是否可以在 C# 中枚举文件句柄,也许使用 Win32API?这对于窗口和进程句柄很容易完成,但对于文件句柄似乎不可能。
虽然 NtQuerySystemInformation
提供了一些功能,但它正在逐步淘汰,因此不建议使用这种方法。
最佳答案
嗯,您知道这是可能的,SysInternals 的 Handle 实用程序可以做到这一点。 NtQueryInformation 不会被淘汰,它是 Win32 和“真实”操作系统之间必不可少的低级接口(interface)。
然而,永远不会发生的是允许迭代句柄的 NtQueryInformation 参数将被记录下来。因为它不止于此,一些布偶将使用它在她/他不想被锁定的文件上调用 CloseHandle()。这是销毁硬盘内容的非常好方法。
拥有句柄的进程不知道句柄已关闭。它会继续写入,可能完全忽略 WriteFile() 的“它没有工作”返回码。这是无害的,直到程序打开另一个句柄,取回与之前关闭的句柄相同的值。现在它开始将垃圾(用于前一个句柄)和新数据混合写入句柄。彻底破坏它正在写入的内容。如果是关键任务数据库,请启动备份磁带。
关于c# - 在 C# 中枚举文件句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2611542/