Windows C++:在不调用 LoadLibrary 的情况下检查 DLL 是否存在并且可加载
Windows C++: Check if DLL is present and loadable without calling LoadLibrary
Windows是否有检查 DLL 是否存在的内置方法,是否可以使用 LoadLibrary 加载,而不实际调用 LoadLibrary?
我想从 DLL A 的 LoadLibrary 期间调用的函数中检查是否存在 DLL B。从 LoadLibrary 调用(嵌套的 LoadLibrary 调用)中调用 LoadLibrary 会导致进程挂起,所以我正在寻找一种不同的方法来检查另一个 DLL 是否正在排队等待加载,或者是否已经加载。
GetModuleHandle()
可以检查是否已经加载了一个 DLL。
虽然您不应该在 DllMain()
中调用 LoadLibraryEx()
,但使用 LOAD_LIBRARY_AS_DATAFILE
调用它可能没问题。如果你这样做,你必须砍掉句柄中的低两位,并手动检查 PE 头中的机器值是否与你的进程相同。不知道datafile文件搜索是否保证和普通DLL文件搜索算法一样
如果你想确保正常的 LoadLibrary()
可以工作,你必须检查导入,并且在你知道之前,你已经编写了自己的 DLL 加载程序...
Windows是否有检查 DLL 是否存在的内置方法,是否可以使用 LoadLibrary 加载,而不实际调用 LoadLibrary?
我想从 DLL A 的 LoadLibrary 期间调用的函数中检查是否存在 DLL B。从 LoadLibrary 调用(嵌套的 LoadLibrary 调用)中调用 LoadLibrary 会导致进程挂起,所以我正在寻找一种不同的方法来检查另一个 DLL 是否正在排队等待加载,或者是否已经加载。
GetModuleHandle()
可以检查是否已经加载了一个 DLL。
虽然您不应该在 DllMain()
中调用 LoadLibraryEx()
,但使用 LOAD_LIBRARY_AS_DATAFILE
调用它可能没问题。如果你这样做,你必须砍掉句柄中的低两位,并手动检查 PE 头中的机器值是否与你的进程相同。不知道datafile文件搜索是否保证和普通DLL文件搜索算法一样
如果你想确保正常的 LoadLibrary()
可以工作,你必须检查导入,并且在你知道之前,你已经编写了自己的 DLL 加载程序...