No se encuentra SetDefaultDllDirectories en Kernel32.dll

Se produce el siguiente error cuando se intenta ejecutar determinados programas en versiones de Windows anteriores a Windows 8 y Windows Server 2012:

No se encuentra el punto de entrada del procedimiento SetDefaultDllDirectories en la biblioteca de vínculos dinámicos Kernel32.dll.

A veces el mensaje menciona AddDllDirectory o RemoveDllDirectory en lugar de SetDefaultDllDirectories. En Windows Vista, Windows Server 2008, Windows 7 y Windows Server 2008 R2 se resuelve mediante actualizaciones. No hay solución para los Windows anteriores a Vista, como XP y Server 2003.

Las funciones AddDllDirectory, RemoveDllDirectory y SetDefaultDllDirectories se introdujeron en la actualización KB2533623 publicada en julio de 2011, “Aviso de seguridad de Microsoft: la carga de una biblioteca no segura podría permitir la ejecución remota de código”. Estas funciones permiten limitar las rutas de búsqueda de bibliotecas para combatir vulnerabilidades relacionadas con la suplantación de ficheros DLL (DLL hijacking). Windows 8, Windows Server 2012 y siguientes ya las incluyen.

Si los programas han de ser compatibles con las versiones anteriores de Windows, Microsoft sugiere a los desarrolladores no invocar las funciones de forma directa, sino obtener sus direcciones durante la ejecución mediante GetProcAddress. Dos ejemplos de programas que no lo cumplen son el ejecutable con el que Sony empaqueta Xperia Companion y el instalador de la versión 0.298 de la aplicación de chat para videojuegos Discord.

La solución más directa para el mensaje de error consiste en instalar a mano el paquete KB2533623, aunque la recomendación es aplicar todas las actualizaciones importantes que ofrezca Windows Update y, en particular para Windows 7 y Windows Server 2008 R2, el paquete mensual de seguridad y calidad más reciente posible.

Los paquetes de Windows Vista requieren al menos el Service Pack 1, aunque se aconsejaría tener el Service Pack 2. No hay ninguna condición especial en Windows 7 pero se recomienda el Service Pack 1 para seguir recibiendo actualizaciones importantes. Existen páginas de descarga específicas para Windows Server 2008 y Windows Server 2008 R2, pero los paquetes MSU y los requisitos son idénticos a los de sus versiones clientes equivalentes. La única diferencia es que Windows Server 2008 continúa con soporte técnico y nuevas actualizaciones a pesar de que el ciclo de vida de Windows Vista finalizó hace varios meses.

Las versiones mínimas de Kernelbase.dll (Windows 7 y Windows Server 2008 R2) y Kernel32.dll que implementan las funciones AddDllDirectory, RemoveDllDirectory y SetDefaultDllDirectories se resumen en la tabla siguiente.

Windows Vista y Windows Server 2008 Service Pack 1
GDR 6.0.6001.18631
LDR 6.0.6001.22898
Service Pack 2
GDR 6.0.6002.18449
LDR 6.0.6002.22625
Windows 7 y Windows Server 2008 R2 RTM
GDR 6.1.7600.16816
LDR 6.1.7600.20978
Service Pack 1
GDR 6.1.7601.17617
LDR 6.1.7601.21728

One thought on “No se encuentra SetDefaultDllDirectories en Kernel32.dll

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *