2012-01-03 123 views
6

我需要列出当前进程中所有打开的句柄。 因为我找不到像“EnumHandles”这样的函数,所以我正在考虑将循环从0改为1000.问题是我如何检索每个句柄的名称? 我使用c + +和操作系统是Win7的32位 编辑: 我需要的名称是一个互斥体。 通过比较互斥的名字,我想把手ID 我似乎使用OpenMutex已经找到解决办法,但我不知道怎么传第三个参数,获取当前进程中所有句柄的名称

+2

你是什么意思的“每个句柄的名称”?手柄没有名字。你的意思是句柄ID,相应的窗口类或文本标题? – 2012-01-03 22:04:28

+0

并非所有句柄都引用具有名称的文件。你有没有考虑过看Process Explorer? – 2012-01-03 22:05:04

+0

该方法不起作用。什么样的手柄? – SLaks 2012-01-03 22:05:25

回答

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中的信息似乎是一个大量的工作,看起来可怕,因为微软并不希望支持它,但你会看到当'easy'API没有给你你需要的东西时,你必须挖掘到NTDLL。这就是ProcessExplorer最终使用的工具。使用起来并不难:加载DLL,使用正确的函数指针来填充你自己声明的结构,并使用网上找到的结构。

+0

我不是指导进程,它是位于当前进程中的句柄 – WePro2 2012-01-03 22:22:59

+0

我严重地解释了它。 NTDLL.DLL库用于获取有关深层系统信息(进程,句柄等)的信息。这是一个未经Microsoft记录的DLL,但您可以在我提供的链接或通过Google搜索找到文档。你只需要知道在DLL中调用的结构和函数。 – fury 2012-01-03 22:32:58

+0

只是为了检索手柄的名称,它看起来很多工作。我认为OpenMutex可能是我正在寻找的答案,但我不确定是否需要传递互斥体(\ Sessions \ 1 \ BaseNamedObjects \ somemutex)的完整路径,或者只是在第三个参数上传递somemutex。我尝试了两种方法,但没有取得成功 – WePro2 2012-01-03 22:44:25

相关问题