为啥 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_SNAPMODULETH32CS_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 函数

为啥我在STM32上不能通过SPI读取寄存器?

为啥我不能在 64 位机器上正确读取 HKCU 中的 32 位注册表值?

AWS Athena 为啥单行或其列的大小不能超过 32 MB 错误 select * from tableName 但不是在 where 条件

STM32f103 的spi控制74HC595显示程序问题 这个程序为啥不能正确显示数码管呢?