我需要列出当前进程中所有打开的句柄。由于我找不到像“EnumHandles”这样的任何函数,我正在考虑制作一个从 0 到 1000 的循环。问题是如何检索每个句柄的名称?我正在使用 c++,操作系统是 Win7 32 位编辑:我需要的句柄名称是互斥锁。通过比较互斥锁的名称,我想获取句柄 ID,我似乎已经找到了使用 OpenMutex 的解决方案,但我不知道要传递第三个参数什么,
问问题
6446 次
1 回答
5
我相信你必须使用NTDLL.DLL。据我所知,这是所有监控进程、句柄和其他系统信息的工具,最终必须在 Windows 下使用。我在一个小型 Win32 工具中使用它,但从来没有列出句柄。
在此处查看该库的良好介绍并与您的问题相关。http://forum.sysinternals.com/howto-enumerate-handles_topic18892.html
还有http://forum.sysinternals.com/enumerate-opened-files_topic3577.html第一篇文章中的 GetObjectName 函数
在 Windows 中访问此类信息可能看起来需要做很多工作并且看起来很可怕,因为 Microsoft 不想支持它,但是您会发现,当“简单”的 API 无法为您提供所需的东西时,您必须挖掘到 NTDLL。这就是 ProcessExplorer 等工具最终使用的工具。使用起来并不难:加载 DLL,获取正确的函数指针来填充您在网上找到的声明自己的结构。
于 2012-01-03T22:18:31.990 回答