Я боюсь, что очень немногие знают причину таинственной ошибки запуска 0xC0000018 EXE, потому что Microsoft делает ее расплывчатой, даже до Windows 10. При чтении Джеффри Рихтера Приложения для программирования для MS Windows 4-е, я случайно обнаружил это.
Если DLL требуется загрузить по фиксированному адресу (в виртуальном адресном пространстве процесса), но это требование не может быть выполнено, Windows выдает ошибку 0xC0000018. Но нет никакой очевидной подсказки, чтобы сказать, какие DLL вызывают проблему. Простой поиск Google "0xC0000018" просто выводит вас с большим количеством сообщений озадаченных пользователей.
Чтобы воспроизвести, вы можете подготовить решение (термин Visual Studio) с одним EXE и двумя DLL, и установить для обоих DLL параметр с компоновщиком, /FIXED /BASE:"0x44440000"и чтобы EXE неявно загружал две библиотеки DLL, тогда вы увидите ошибку 0xC0000018 при запуске EXE.
И да, очистка APPINIT_DLLSв реестре - ваша первая ставка, чтобы избавиться от возможных преступников. Эти DLL будут загружены в каждый процесс, который вы запускаете, так что это может испортить вам жизнь.
Тогда как точно определить виновника DLL? Возможно, есть способ, используйте dumpbin.exe, чтобы проверить каждую DLL-библиотеку APPINIT_DLLSили другие возможные автоматически загружаемые DLL-библиотеки (помогите с автозапуском ), проверьте их по одному dumpbin -headers. Если .relocраздела нет , то это DLL с фиксированным расположением .