【问题标题】:Avoid Re-initialization of Critical Section避免关键部分的重新初始化
【发布时间】:2014-05-09 20:06:51
【问题描述】:

我有一个 dll,它可以创建全局临界区、初始化并使用它。

现在第三方应用程序多次使用/加载 dll,导致堆损坏。

appverifier

警告我

--> 验证器停止 00000211:pid 0x1470:关键部分已初始化。

使用全局标志来检查临界区对象是否已经初始化并没有帮助,有什么想法可以完成同样的事情吗?

谢谢

【问题讨论】:

标签: windows winapi critical-section


【解决方案1】:

现在第三方应用程序正在多次使用/加载 dll

Windows 不会多次重新加载同一个 DLL。其中 same 表示相同的路径。如果第 3 方应用是从不同位置加载的,那就是问题所在。

【讨论】:

  • Windows 可以多次重新加载同一个 DLL。 DLL 是引用计数的。您还可以调用进程和线程启动停止。如果加载应用程序释放库并再次加载它,这是完全可能的。表示释放dll时临界区没有清理代码。
  • DLL 不会被另一个 LoadLibrary 调用重新加载,引用将增加,但不会调用 DllMain。
【解决方案2】:

可能对使用“setAtom”和“getAtom”API 有帮助吗?我知道他们有点“老派”,但你永远不会知道。

【讨论】:

    猜你喜欢
    • 2010-12-20
    • 2018-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多