Боюсь, что мало кто знает причину загадочной ошибки запуска 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 - библиотека с фиксированным расположением .