Trucos y Configuración de Windows

Erro de ponto de entrada SxS: repara cache com 512 manifestos

Post actualizado el día octubre 26, 2026 by DeiviSanzPlay

Se você já viu aquele erro sem sentido no Windows — algo como «não foi possível localizar o ponto de entrada de procedimento … não coincide com o nome … 512 … dll» — sabe que não é apenas um bug qualquer. É o sintoma de um problema real no cache SxS (Side-by-Side). E não, não se resolve só reiniciando. Em 2026, com a quantidade de bibliotecas que os instaladores modernos despejam no sistema, esse erro voltou a aparecer com força, especialmente em máquinas que ultrapassam 512 manifestos registrados no WinSxS. Vamos por partes, sem enrolação.

O que diabos é o cache SxS e por que 512 manifestos quebram tudo

O Windows usa o WinSxS para gerenciar versões concorrentes de DLLs e manifestos de assembly. Cada vez que um app pede uma versão específica de uma biblioteca, o carregador consulta esse cache. O problema: o índice de manifestos tem um limite prático de 512 entradas em certos cenários de resolução de exports. Quando você passa disso, o carregador começa a mapear nomes de forma errada e dispara o famoso erro de ponto de entrada em DLLs que, teoricamente, estão lá.

Isso não é teoria de fórum. Já vi servidores de build com 700+ manifestos registrados após instalar SDKs antigos, Visual C++ Redistributables de várias décadas e runtimes .NET lado a lado. O erro aparece do nada, geralmente depois de um update do Windows ou de um deploy novo.

A chave é: o cache SxS corrompe a resolução de exports ao ultrapassar 512 manifestos. Não é um limite documentado oficialmente pela Microsoft, mas é um comportamento observável em ambientes corporativos. E quando acontece, você perde horas achando que é problema de dependência do seu código, quando é do sistema.

Como identificar exatamente qual DLL está com o ponto de entrada errado

Primeiro, pare de adivinhar. O erro geralmente cita um nome de função que não existe na DLL, e a mensagem é truncada ou estranha. O caminho é usar dumpbin /imports caminho_da_dll para ver exatamente quais nomes de export o importador espera. Isso te dá a lista real do que está sendo pedido.

Depois, use dumpbin /exports na DLL suspeita. Compare os nomes exportados com os que o importador espera. Se houver diferença de um caractere, de maiúscula/minúscula ou de versão (tipo 512 vs 510), você achou o culpado. O erro «não coincide com o nome» é literal: o nome da export não bate com o que o importador espera.

Uma dica de quem já perdeu dias nisso: rode tudo em um diretório limpo e capture a saída para um log. O dumpbin é chato, mas é o único jeito confiável de ver a verdade. Ferramentas gráficas como Dependency Walker mentem em ambientes SxS complexos.

Reintentando o carregamento com LoadLibraryEx e hook de falha

Se você é desenvolvedor e quer uma solução programática, o caminho é hookear a função __pfnDliFailureHook. Ela é chamada quando uma carga de DLL falha por erro de ponto de entrada. Nesse hook, você pode interceptar a falha e tentar de novo com LoadLibraryEx usando a flag LOAD_LIBRARY_SEARCH_SYSTEM32. Essa flag força o carregador a buscar a DLL apenas no System32, ignorando o cache SxS corrompido.

Isso não é bala de prata, mas resolve em muitos casos onde o problema é um manifesto corrompido que aponta para uma versão errada. O código fica mais ou menos assim: no hook, você pega o nome da DLL que falhou, monta o caminho completo para System32 e chama LoadLibraryEx com a flag. Se a DLL existir lá, o carregamento segue. Se não, você loga e deixa falhar.

Importante: essa abordagem só funciona se a DLL correta estiver no System32. Se for uma dependência de terceiros, você precisa ajustar o caminho e talvez usar LOAD_LIBRARY_SEARCH_DEFAULT_DIRS. A flag de isolamento SYSTEM32 é a mais segura para evitar contaminação cruzada.

Limpeza do cache SxS: o que funciona e o que quebra o sistema

Muita gente recomenda rodar DISM /Online /Cleanup-Image /StartComponentCleanup ou o clássico sfc /scannow. Ambos ajudam, mas não resolvem o problema de limite de 512 manifestos. Na real, o DISM pode até piorar se você tiver assemblies antigos que ainda são necessários.

O que funciona de verdade: identificar manifestos órfãos e removê-los manualmente. Você pode listar os manifestos registrados com mt.exe -inputresource:arquivo.dll;#2 -out:manifest.xml para ver o que está embutido. Mas cuidado: apagar manifestos do WinSxS é jogar roleta-russa. Só faça isso em ambiente de teste primeiro.

Outra abordagem é usar o Process Monitor para ver em tempo real qual caminho de DLL está sendo consultado. O erro de ponto de entrada geralmente vem acompanhado de um PATH_NOT_FOUND ou NAME_NOT_FOUND no ProcMon. Isso te dá a pista exata de qual manifesto está sendo consultado e não encontrado.

Prevenção: como não cair nessa armadilha em 2026

Se você gerencia parques de máquinas, a regra é clara: mantenha o número de manifestos SxS abaixo de 512. Como? Evite instalar múltiplos Visual C++ Redistributables de versões conflitantes. Consolide dependências em um único runtime. E, se possível, use containers ou ambientes isolados para builds antigos.

Para desenvolvedores, a dica é testar o aplicativo em uma máquina limpa com o Windows atualizado e depois em uma máquina «suja» com muitos softwares instalados. O erro de ponto de entrada por cache SxS é um daqueles que só aparece no cliente, nunca no seu PC de desenvolvimento.

E se você já está no meio do problema, a sequência é: dumpbin para identificar, hook __pfnDliFailureHook com LoadLibraryEx para contornar, e limpeza cirúrgica do WinSxS para resolver de vez. Não perca tempo com soluções mágicas de fórum. O problema é real e tem solução técnica.