我有一个用于身份验证的 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 的服务时,它可以正常运行数周,但随后开始出现错误。
现在我找不到内存不足的什么了。任务调度程序看起来不错,可用内存充足。
我该怎么做才能解决这个问题?
最佳答案
which is OUT_OF_MEMORY.
是E_OUTOFMEMORY,一个COM错误码。描述不是很有帮助,Microsoft 代码往往会针对任何“资源不足”错误返回此错误代码,而不仅仅是内存。可能是达到了内部限制,可能是失败的 winapi 调用。
而且不一定局限于直接涉及的软件。例如,泄漏内核池内存的错误设备驱动程序可能是错误的间接来源。
如果您能在应用程序事件日志中找到一些东西,您会很幸运,同时查看报告错误的机器和域服务器。任务管理器可能会提供线索,添加句柄、GDI 对象、用户对象、提交大小、页面池和 NP 池列。除此之外很难给出具体的建议。毫无疑问,这是一次泄漏,当您必须定期重新启动机器以恢复时,它会发出很大的嘎嘎声。祝你好运。
关于c++ - ADsOpenObject() 返回 -2147024882 (0x8007000E) -> OUT_OF_MEMORY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20419852/