为啥 TH32CS_SNAPMODULE32 不能单独工作?
Posted
技术标签:
【中文标题】为啥 TH32CS_SNAPMODULE32 不能单独工作?【英文标题】:Why does TH32CS_SNAPMODULE32 doesn't work alone?为什么 TH32CS_SNAPMODULE32 不能单独工作? 【发布时间】:2016-01-03 23:47:47 【问题描述】:我在 WinAPI 中试验了一些东西。我的操作系统是 Win7 x64 P1 Ultimate。当我试图列出一个进程的所有模块时,我发现我想要的模块是一个 32 位模块,所以我替换了
TH32CS_SNAPMODULE
有
TH32CS_SNAPMODULE32
在此之后没有显示任何模块。所以我决定尝试使用按位运算符,看起来如果我发送这样的参数
TH32CS_SNAPMODULE32 | TH32CS_SNAPMODULE
它工作得很好,列出了所有 64 位和 32 位模块。所以我的问题是为什么它不能单独工作?甚至文档都说它可以与TH32CS_SNAPMODULE
一起使用。
引用自 MSDN
TH32CS_SNAPMODULE32
当从 64 位进程调用时,包括快照中 th32ProcessID 中指定的进程的所有 32 位模块。该标志可以与 TH32CS_SNAPMODULE 或 TH32CS_SNAPALL 结合使用。如果函数以 ERROR_BAD_LENGTH 失败,请重试该函数直到成功。
【问题讨论】:
听起来文档有误(或至少措辞不当)。 【参考方案1】:文档确实令人困惑。它的意思是TH32CS_SNAPMODULE32
标志必须与另一个标志结合,但只能与TH32CS_SNAPMODULE
或TH32CS_SNAPALL
结合。
在这个官方答案TH32CS_SNAPMODULE vs TH32CS_SNAPMODULE32 中措辞稍微好一点 - 请注意“extra”:
根据开发团队的反馈,TH32CS_SNAPMODULE 将 为您提供本机模块。您可以将 TH32CS_SNAPMODULE32 与 TH32CS_SNAPMODULE 在 64 位机器上也可以获取 32 位模块。它 存在表示您想要额外的 32 位模块状态。
【讨论】:
以上是关于为啥 TH32CS_SNAPMODULE32 不能单独工作?的主要内容,如果未能解决你的问题,请参考以下文章
August 11th 2017 Week 32nd Friday
为啥 Detours 不能再在 Windows 7+ 中挂钩 shell32.dll 函数
为啥我不能在 64 位机器上正确读取 HKCU 中的 32 位注册表值?
AWS Athena 为啥单行或其列的大小不能超过 32 MB 错误 select * from tableName 但不是在 where 条件