Eu tenho medo que poucas pessoas saibam a causa raiz do misterioso 0xC0000018 erro de lançamento do EXE porque a Microsoft o torna vago, mesmo até o Windows 10. Ao ler o Programação de Aplicativos do Jeff Windows Richter para MS Windows Eu acabei descobrindo isso.
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 diga qual DLL (s) causa o problema. Uma simples pesquisa no Google de "0xC0000018" apenas mostra muitas mensagens de usuários confusos.
Para reproduzir, você pode preparar uma solução (termo do Visual Studio) com um EXE e duas DLLs 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, em seguida, você verá o erro 0xC0000018 no lançamento do EXE.
E sim, limpar APPINIT_DLLS
no registro é sua primeira aposta para se livrar dos possíveis culpados. Essas DLLs serão carregadas em todos os processos que você iniciar, o que pode arruinar sua transmissão ao vivo.
Então, como identificar a DLL real culpada? Talvez haja uma maneira, use dumpbin.exe para verificar todas as DLLs em APPINIT_DLLS
ou outras DLLs auto-carregadas possíveis (ajuda com AutoRuns ), verifique-os um por um com dumpbin -headers
. Se não houver uma seção .reloc
, é uma DLL local fixo .