【问题标题】: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 失败,请重试该函数直到成功。

【问题讨论】:

  • 听起来文档有误(或至少措辞不当)。

标签: c winapi


【解决方案1】:

文档确实令人困惑。它的意思是TH32CS_SNAPMODULE32标志必须与另一个标志结合,但只能TH32CS_SNAPMODULETH32CS_SNAPALL结合。

在这个官方答案TH32CS_SNAPMODULE vs TH32CS_SNAPMODULE32 中措辞稍微好一点 - 请注意“extra”:

根据开发团队的反馈,TH32CS_SNAPMODULE 将 为您提供本机模块。您可以将 TH32CS_SNAPMODULE32 与 TH32CS_SNAPMODULE 在 64 位机器上也可以获取 32 位模块。它 存在表示您想要额外的 32 位模块状态。

【讨论】:

    猜你喜欢
    • 2015-07-26
    • 2016-05-18
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-07-27
    • 1970-01-01
    • 2017-07-11
    相关资源
    最近更新 更多