在C#中枚举文件句柄

8
我想知道在C#中是否可以枚举文件句柄,也许可以使用Win32API?对于窗口和进程句柄,这很容易实现,但似乎对于文件句柄不可能。虽然一些功能由NtQuerySystemInformation提供,但该方法正在逐步淘汰,因此不建议使用这种方法。

可能是重复的 https://dev59.com/-kXRa4cB1Zd3GeqPtJci - Sheng Jiang 蒋晟
4个回答

8

嗯,你知道这是可能的,SysInternals的Handle工具可以做到。NtQueryInformation不会被淘汰,它是Win32和“真正”的操作系统之间必不可少的低级接口。

然而,永远不会发生的是,允许迭代句柄的NtQueryInformation参数将被记录。因为事情并不止于此,有些笨蛋会使用它来调用CloseHandle()关闭他/她不想锁定的文件。这是一个非常好的方法来销毁你的硬盘内容。

拥有句柄的进程不知道句柄已经关闭。它将继续写入它,很可能完全忽略WriteFile()返回的“它没有起作用”的返回代码。这是无害的,直到程序打开另一个句柄,得到与先前关闭的句柄相同的值。现在它开始向句柄写入一堆垃圾(旨在用于上一个句柄)和新数据。彻底破坏它正在写入的任何内容。如果这是类似于关键任务数据库的东西,请启动备份磁带。


0

0

-1

该地址上的链接已经失效。 - mg30rg
代码在Windows 10 x64中的“GetObjectTypeNumber”函数中引发了异常,即使更改了“IsWindowsVista”函数也是如此。 - daniol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接