【问题标题】:ADsOpenObject() returns -2147024882 (0x8007000E) -> OUT_OF_MEMORYADsOpenObject() 返回 -2147024882 (0x8007000E) -> OUT_OF_MEMORY
【发布时间】:2013-12-06 09:00:59
【问题描述】:

我有一个用于身份验证的 C++ DLL,它由 Windows 服务为每次登录加载。

在那个 DLL 中,我使用 Windows ADSI 函数 ADsOpenObject()Active Directory 获取用户对象。

HRESULT hr = ADsOpenObject(L"LDAP://rootDSE",
                           L"username",
                           L"password",
                           m_dwADSFlags,
                           IID_IDirectorySearch,
                           (void**)&m_DSSearch);

通常这在几年前就有效。但目前我得到错误代码

-2147024882 (0x8007000E)

这是OUT_OF_MEMORY。当我重新启动正在使用我的 DLL 的服务时,它可以正常运行数周,但随后开始出现错误。

现在我找不到 什么 内存不足。任务调度程序看起来不错,可用内存充足。
我能做些什么来解决这个问题?

【问题讨论】:

  • ActiveDirectory 服务器是否内存不足?
  • 不,不是。其他应用程序也没有任何问题。
  • 如果我查看源文件“winerror.h”中的错误 14L,然后我看到 MessageText 为 没有足够的存储空间来完成此操作。这是存储问题?请参阅here,了解我使用 14L 的原因。
  • 不,存储可用。
  • “任务计划程序看起来不错,可用内存充足。”是什么意思?您是在查看系统的可用 RAM 还是进程的虚拟大小?

标签: c++ active-directory out-of-memory adsi


【解决方案1】:

这是 OUT_OF_MEMORY。

它是 E_OUTOFMEMORY,一个 COM 错误代码。描述不是很有帮助,Microsoft 代码往往会为任何“资源不足”错误返回此错误代码,而不仅仅是内存。如果达到内部限制,可能是 winapi 调用失败。

而且不一定限于所涉及的直接软件。例如,泄漏内核池内存的错误设备驱动程序可能是事故的间接来源。

如果你能在应用程序事件日志中找到一些东西,你会很幸运,同时查看报告错误的机器和域服务器。任务管理器可能会给出提示,添加 Handles、GDI Objects、USER Object、Commit size、Page pool 和 NP Pool 列。除此之外,很难给出具体的建议。毫无疑问,这是一个泄漏,当您必须定期重新启动机器以恢复时,它会像一个响亮的嘎嘎声。祝你好运。

【讨论】:

    【解决方案2】:

    您是在 m_DSSearch 上调用 Release 吗?此外,如果您正在搜索,则需要调用 CloseSearchHandle 或 AbandonSearch。如果您不执行其中任何一项,则可能会慢慢泄漏内存。

    【讨论】:

      【解决方案3】:

      您的进程可能会将堆碎片化到某个点,从而使 ADsOpenObject 无法找到足够大的连续内存块。

      您可以使用 VMMap 来分析您的内存使用情况: http://technet.microsoft.com/en-us/sysinternals/dd535533

      您可以尝试启用低碎片堆: http://msdn.microsoft.com/en-us/library/windows/desktop/aa366750(v=vs.85).aspx

      【讨论】:

        【解决方案4】:

        如果它现在开始出现而不是更早,我会假设两种可能性之一:它与时间有关(更具体地说,是年份,某种千禧年虫)。另一种选择是 32/64 位架构的问题。

        现在请注意,我不会编程 C++。但我确实对 MS 错误有所了解(我曾在 MS 帮助台工作过......)

        【讨论】:

          猜你喜欢
          • 2021-10-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多