Receio que poucas pessoas conheçam a causa raiz do misterioso erro de inicialização do 0xC0000018 EXE porque a Microsoft torna-o vago, mesmo até o Windows 10. Ao ler os Aplicativos de Programação para Jeffrey Richter para MS Windows 4th-ed, descobri.
Se uma DLL precisar ser carregada em um endereço fixo (no espaço de endereço virtual do processo), mas o requisito não puder ser atendido, o Windows confirmará o erro 0xC0000018. Mas não há nenhuma pista aparente para saber quais DLL (s) causam o problema. Uma simples pesquisa no Google de "0xC0000018" mostra várias postagens de usuários confusos.
Para reproduzir, você pode preparar uma solução (termo do Visual Studio) com um EXE e duas DLL, e definir a DLL para ter a opção de vinculador /FIXED /BASE:"0x44440000"
e fazer com que o EXE carregue implicitamente as duas DLLs, e você verá o erro 0xC0000018 ao iniciar o EXE.
E sim, limpar APPINIT_DLLS
o registro é sua primeira aposta para se livrar dos possíveis culpados. Essas DLLs serão carregadas em todos os processos iniciados, por isso podem arruinar a sua vida.
Então, como identificar a DLL culpada real? Talvez exista uma maneira de usar o dumpbin.exe para verificar todas as DLLs APPINIT_DLLS
ou outras possíveis DLLs carregadas automaticamente (ajuda com o AutoRuns ), verifique-as uma a uma dumpbin -headers
. Se não houver .reloc
seção, é uma DLL de local fixo .