0

状況は次のとおりです。これらの dll はプロセスでロードされます。

c:\abc\foo.dll
c:\abc\bar.dll
c:\zxc\foo.dll

プロセスは にありc:\abc\ます。読み込んc:\zxc\bar.dllでいます。に暗黙的にリンクしfoo.dllます。c:\zxc\foo.dllそして、同じフォルダにある にリンクする必要があります。私はそれをロードします

LoadLibraryExA("c:\\zxc\\bar.dll", NULL, LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR)

c:\abc\foo.dllがロードされていない場合は、c:\zxc\foo.dll適切にロードされてc:\zxc\bar.dllリンクされます。ただし、c:\abc\foo.dllがロードされている場合は、代わりに にc:\\zxc\\bar.dllリンクします(プロセスで既にロードされている場合でも)。これは、Global Flags の [Show loader snaps] チェックボックスを使用して確認されました。c:\abc\foo.dllc:\zxc\foo.dllc:\zxc\foo.dll

どうすれば回避できますか?

これbar.dllはサードパーティであるため、DELAYLOAD を実装することはできません。

c:\abc\foo.dllそして、プロセスへのロードを防ぐことはできません。

フックを考えてntdll!LdrpFindOrMapDllいますが、信頼性がないようで、サポートされているすべての Windows バージョンでこれを徹底的にテストする必要があるため、最初はより簡単な回避策を探しています。

4

1 に答える 1