マイクロソフトがWindows 10まで漠然としているため、謎の0xC0000018 EXE起動エラーの根本的な原因を知っている人はほとんどいないと思います。MSWindows 4版のJeffrey Richterのプログラミングアプリケーションを読んだとき、偶然見つけました。
DLLを(プロセス仮想アドレス空間内の)固定アドレスでロードする必要があるが、要件を満たせない場合、Windowsは非常に0xC0000018エラーをアサートします。しかし、どのDLLが問題の原因であるかを明らかにする手掛かりはありません。「0xC0000018」の単純なGoogle検索では、困惑したユーザーの多数の投稿が表示されます。
再現するには、1つのEXEと2つのDLLでソリューション(Visual Studio用語)を準備し、両方のDLLにリンカーオプションを設定し/FIXED /BASE:"0x44440000"
、EXEに2つのDLLを暗黙的にロードさせると、EXEの起動時に0xC0000018エラーが表示されます。
そして、はい、APPINIT_DLLS
可能性のある犯人を取り除くための最初の賭けは、レジストリをクリアすることです。これらのDLLは、起動するすべてのプロセスにロードされるため、ライブを台無しにする可能性があります。
次に、実際の原因DLLを特定するにはどうすればよいですか?おそらく、すべての中にDLLをチェックする方法、使用DUMPBIN.EXEがあるAPPINIT_DLLS
か、他の可能な自動ロードされたDLL(のヘルプを自動起動が)、それらを持つ一つ一つを確認してくださいdumpbin -headers
。.reloc
セクションがない場合、それは固定位置 DLLです。