gpt4 book ai didi

windows - 如何判断 Windows 模块句柄是否仍然有效?

转载 作者:可可西里 更新时间:2023-11-01 13:30:53 25 4
gpt4 key购买 nike

一个模块可以被卸载,那么我如何确定它是否还在内存中呢?我有一个它的句柄,从 GetModuleHandle 获得。当我尝试对其调用 GetHandleInformation 时,我看到错误 0xc0000008 - “指定了无效的 HANDLE。”这发生在它可以被卸载之前。

最佳答案

术语“句柄”在这里有点过载 - Win32 API 中的许多不同类别的对象都称为“句柄”。

GetHandleInformation 用于处理内核对象 - 文件、注册表项、互斥量等。

GetModuleHandle 返回的 HMODULE 由加载程序使用,不是实际的内核对象,因此 GetHandleInformation 失败。不过,您在 GetHandleInformation 中获得的两个标志对 HMODULE 都没有意义。

如果您想检查 HMODULE 是否仍在内存中加载,您只需调用 GetModuleHandle - 这个 API 应该足够快,可以调用多次。但是,GetModuleHandle 的结果在返回时可能无效 - 另一个线程可能调用了 FreeLibrary。最好确保 DLL 保持加载状态。您可以通过自己调用 LoadLibrary 或调用 GetModuleHandleEx 来执行此操作,这将增加 DLL 的引用计数。

关于windows - 如何判断 Windows 模块句柄是否仍然有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1111820/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com