AMD LoadLibrary falló con el error 87 después de cambiar de NVIDIA
Idiomas: English · Español
Esta guía documenta un fallo confirmado de instalación de controladores en Windows: un co-instalador huérfano de la clase de pantalla de NVIDIA impidió que se registraran los componentes de software de AMD. El controlador base de pantalla de AMD parecía instalarse correctamente, pero OpenGL y Vulkan quedaban inutilizables.
El error exacto de la aplicación era:
LoadLibrary failed with error 87: El parámetro no es correcto.
Búsquedas y síntomas relacionados incluyen error 87 de OpenGL ChoosePixelFormat en AMD, Vulkan no encontró controladores AMD, falta OpenGLVendorName, falta la DLL nvdispco después de desinstalar NVIDIA y AMD regamdcomp.exe no registró OpenGL ni Vulkan.
[!CAUTION] No elimines un co-instalador de la clase de pantalla de NVIDIA en un sistema que todavía tenga un adaptador de pantalla NVIDIA presente. El script de reparación de este repositorio se niega a continuar en esa configuración. Creá siempre copias de seguridad del registro antes de modificar el registro de controladores.
Respuesta breve
En el caso confirmado, Windows conservó esta entrada del co-instalador de la clase de pantalla después de que la GPU NVIDIA y su archivo de controlador ya no estuvieran:
HKLM\SYSTEM\CurrentControlSet\Control\CoDeviceInstallers
{4D36E968-E325-11CE-BFC1-08002BE10318}
nvdispco6445671.dll,NvDspFixCoInstall
El archivo referenciado, %SystemRoot%\System32\nvdispco6445671.dll, ya no existía. Una instalación posterior de AMD intentó cargarlo, registró el error Win32 126 (ERROR_MOD_NOT_FOUND) y luego no pudo crear los dispositivos de componentes de software de OpenGL, Vulkan, OpenCL y soporte de Windows de AMD. Como esos componentes nunca coincidieron con un dispositivo, no se ejecutó el registro final mediante regamdcomp.exe. Los archivos de AMD estaban presentes en DriverStore, pero faltaban sus enlaces de registro para OpenGL y Vulkan.
Restaurar los registros de OpenGL y Vulkan de AMD corrigió el error inmediato. Eliminar únicamente el co-instalador huérfano exacto de NVIDIA corrigió la condición raíz confirmada que podía volver a romper futuras instalaciones de AMD.
Esta es una causa del error 87 respaldada por evidencias, no una explicación universal para todos los casos.
A quién se aplica esta guía
Usá esta guía cuando se cumplan todas o la mayoría de estas condiciones:
- Una PC con Windows cambió de una GPU NVIDIA a una GPU AMD.
- El controlador de pantalla AMD se instala, pero las aplicaciones OpenGL fallan al iniciar con el error 87.
vulkaninfo --summaryinforma que no encontró controladores.- Los archivos de OpenGL y Vulkan de AMD existen, pero faltan sus registros en el sistema.
- SetupAPI registra un intento fallido de cargar un
nvdispco...dllinexistente desde%SystemRoot%\System32. - La máquina ya no tiene un adaptador de pantalla NVIDIA presente.
Esta guía no diagnostica pantallas negras de la GPU, eventos de detección y recuperación por tiempo de espera, overclocks inestables, fallos de alimentación, cierres específicos de un juego ni una versión de controlador que sea defectuosa de manera independiente.
Mapa de diagnóstico rápido
| Síntoma o evidencia | Qué sugiere | Cómo confirmarlo |
|---|---|---|
LoadLibrary failed with error 87 durante el inicio de OpenGL |
Windows no puede completar la carga del ICD de OpenGL de AMD | Comprobar OpenGLVendorName y crear un contexto WGL nuevo |
vulkaninfo dice que no encontró controladores |
No hay un ICD Vulkan de AMD utilizable registrado | Comprobar ambas ramas Drivers de Vulkan de Khronos |
Faltan OpenGLVendorName y OpenGLVendorNameWow |
El componente OpenGL de AMD no completó su registro | Inspeccionar la clave activa de la clase de pantalla AMD |
| Falta la DLL del co-instalador NVIDIA pero se conserva la entrada de clase | Un co-instalador global obsoleto puede interferir con instalaciones posteriores | Inspeccionar CoDeviceInstallers y SetupAPI |
| Los INF de componentes AMD informan que no hay dispositivos coincidentes | No se crearon los dispositivos virtuales de componentes de software AMD | Correlacionar las directivas AddComponent del INF de pantalla con SetupAPI |
| Los archivos AMD existen en DriverStore pero las API fallan | La copia terminó, pero no el registro final | Buscar la etapa de registro faltante de regamdcomp.exe |
Cadena de evidencias
La distinción importante está entre una instalación exitosa del controlador base de pantalla y la instalación exitosa de todos sus componentes relacionados.
- El INF de pantalla AMD contiene directivas
AddComponentpara los componentes OpenGL, Vulkan, OpenCL y de soporte de Windows de AMD. - Windows invoca los co-instaladores de la clase de pantalla mientras procesa la instalación del dispositivo.
- El valor global de la clase de pantalla todavía menciona
nvdispco6445671.dll,NvDspFixCoInstall. - Windows intenta cargar la ruta absoluta bajo
%SystemRoot%\System32, pero la DLL no existe. SetupAPI registra el error 126. - El controlador base AMD igualmente llega a un estado exitoso, mientras que los INF de componentes informan que no encuentran dispositivos de componentes de software coincidentes.
- Los nodos de dispositivo esperados para los componentes de software AMD están ausentes.
- El comando de registro del componente no se ejecuta; por eso faltan
OpenGLVendorName,OpenGLVendorNameWowy los valores ICD de Vulkan aunque los archivos se hayan copiado. - OpenGL muestra el error 87 cuando
ChoosePixelFormatactiva la carga del ICD; Vulkan informa que no hay controladores porque no tiene un manifiesto registrado utilizable.
Un patrón mínimo de log reconstruido se ve así:
Display-class co-installer: %SystemRoot%\System32\nvdispco6445671.dll
Load failed: ERROR_MOD_NOT_FOUND (126)
AMD software-component INF: Unable to find any matching devices
Base display device installation: completed
El ejemplo está reconstruido y anonimizado de manera intencional. No publiques logs crudos de SetupAPI: pueden contener identificadores de instancias de dispositivos y otros datos específicos de la máquina.
Por qué importan los componentes AMD
Los controladores organizados en componentes de Windows pueden crear componentes de software secundarios mediante una directiva INF AddComponent. Cada componente secundario se vincula después con su propio INF y sección de instalación. Microsoft documenta este flujo en INF AddComponent Directive y Using a Component INF File.
Los co-instaladores son callbacks separados en DLL registrados para la configuración de dispositivos. Microsoft actualmente recomienda métodos modernos basados en paquetes en lugar de co-instaladores, pero Windows todavía procesa los co-instaladores registrados para las instalaciones aplicables. Consultá INF DDInstall.CoInstallers Section.
En este fallo, no alcanzaba con que los archivos existieran. La ausencia de los nodos de dispositivos de componentes de software impedía que la etapa de registro de AMD conectara esos archivos con los cargadores de OpenGL y Vulkan.
Diagnóstico de solo lectura
Descargá o cloná este repositorio, abrí Windows PowerShell y ejecutá el script de diagnóstico de solo lectura:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\diagnose-amd-registration.ps1
El script informa únicamente booleanos y rutas genéricas del sistema. No imprime nombres de paquetes de DriverStore, identificadores de instancias de hardware ni rutas de usuarios.
Códigos de salida:
| Código | Significado |
|---|---|
0 |
El registro de OpenGL/Vulkan de AMD está sano y el co-instalador obsoleto exacto está ausente |
2 |
Se detectó un registro roto u obsoleto que puede repararse |
3 |
El estado de los adaptadores no es compatible o no es seguro para una reparación automática |
El diagnóstico no realiza ninguna escritura en el registro.
Reparación automatizada con protecciones
Revisá el script de reparación antes de ejecutarlo. Empezá por el modo de vista previa:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\repair-amd-registration.ps1
Si pasan todas las comprobaciones de seguridad, ejecutalo desde una sesión elevada de Windows PowerShell:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\repair-amd-registration.ps1 -Apply
El script:
- exige un adaptador de pantalla AMD presente y una clave activa de la clase de pantalla AMD;
- se niega a continuar cuando detecta un adaptador de pantalla NVIDIA presente;
- elimina únicamente la entrada exacta
nvdispco6445671.dll,NvDspFixCoInstall, y sólo cuando su DLL está ausente; - conserva todas las demás entradas de co-instaladores de la clase;
- resuelve dinámicamente las bibliotecas OpenGL de AMD instaladas y un par completo y actual de manifiestos Vulkan;
- exporta el co-instalador, la clase de pantalla AMD y ambas ramas del registro de Vulkan antes de modificar nada;
- guarda las copias bajo
C:\tmp\amd-registration-backup-<timestamp>; - asegura los registros AMD de OpenGL y Vulkan de 64 y 32 bits;
- solicita un escaneo no destructivo de Plug and Play; y
- ejecuta comprobaciones posteriores del registro.
No desinstala, elimina por la fuerza, baja de versión ni reinstala ningún paquete de controlador de pantalla.
Qué modifica la reparación
El valor exacto del co-instalador de la clase se elimina cuando contiene sólo la entrada huérfana de NVIDIA, o se vuelve a escribir como REG_MULTI_SZ conservando todas las entradas que no coincidan.
En la clave activa de la clase de pantalla AMD, el script asegura:
OpenGLVendorName -> biblioteca OpenGL AMD de 64 bits instalada
OpenGLVendorNameWow -> biblioteca OpenGL AMD de 32 bits instalada
También asegura un valor de manifiesto AMD habilitado (DWORD 0) bajo ambas ramas del cargador:
HKLM\SOFTWARE\Khronos\Vulkan\Drivers
HKLM\SOFTWARE\WOW6432Node\Khronos\Vulkan\Drivers
El script descubre dinámicamente la subclave de pantalla y el paquete de DriverStore reales. No copies el número de una subclave 0000 ni el directorio de un paquete DriverStore desde otra PC.
Referencia de reparación manual
Para diagnóstico avanzado, el orden seguro es:
- Confirmar que el adaptador AMD está presente y no hay un adaptador NVIDIA presente.
- Exportar la clave completa
CoDeviceInstallers, la clave activa de la clase de pantalla AMD y ambas clavesDriversde Vulkan. - Confirmar que la lista de co-instaladores contiene una coincidencia exacta con
nvdispco6445671.dll,NvDspFixCoInstall. - Confirmar que
%SystemRoot%\System32\nvdispco6445671.dllestá ausente. - Eliminar sólo esa entrada de la lista y conservar todas las demás.
- Resolver las bibliotecas OpenGL de AMD instaladas y los manifiestos Vulkan emparejados actuales de esa máquina.
- Restaurar los registros de ambas arquitecturas para OpenGL y Vulkan.
- Volver a escanear los dispositivos y verificar ambas API.
El script automatizado codifica estas comprobaciones y es más seguro que copiar comandos de registro con rutas específicas de otra máquina.
Reversión
Cada reparación aplicada imprime su directorio de respaldo. Validá una copia con el script de reversión en modo de vista previa:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\rollback-amd-registration.ps1 -BackupDirectory 'C:\tmp\amd-registration-backup-<timestamp>'
Sólo si realmente necesitás revertir, ejecutá el mismo comando con permisos elevados y -Apply:
powershell.exe -NoProfile -ExecutionPolicy Bypass -File .\scripts\rollback-amd-registration.ps1 -BackupDirectory 'C:\tmp\amd-registration-backup-<timestamp>' -Apply
La reversión valida el directorio, el manifiesto, los nombres de archivos, la clave de la clase de pantalla y las rutas de los manifiestos AMD antes de importar nada.
Verificación
Después de la reparación:
- Ejecutá otra vez el script de diagnóstico. Debe salir con código
0. - Creá un contexto OpenGL nuevo y confirmá que el proveedor y el renderizador sean AMD, no el renderizador por software de Microsoft.
- Ejecutá
vulkaninfo --summaryy confirmá que salga con código0y muestre un dispositivo físico AMD. - Reiniciá una vez y repetí las comprobaciones antes de considerar que la reparación es duradera.
- En una actualización posterior del controlador AMD, revisá SetupAPI para confirmar que la DLL antigua de NVIDIA ya no se invoca.
El último punto es la confirmación integral más fuerte de que la instalación futura de componentes ya no recorre la ruta rota. Eliminar la entrada obsoleta verificada corrige la condición raíz, pero este repositorio no afirma que un instalador futuro del proveedor ya haya sido probado en todas las máquinas.
Por qué las herramientas de limpieza pueden no ser suficientes
DDU y AMD Cleanup Utility son útiles para eliminar paquetes del proveedor y residuos específicos de dispositivos. Este caso involucraba un valor global de co-instalador de la clase de pantalla bajo CoDeviceInstallers. Una limpieza puede eliminar la DLL o el paquete y dejar ese registro compartido de clase. Eso crea el estado especialmente confuso en el que el archivo del proveedor anterior ya no existe, pero Windows continúa intentando llamarlo durante la instalación de otro proveedor.
La prueba decisiva no es si todavía existe una carpeta NVIDIA. Es si permanece el valor exacto del co-instalador de la clase y si SetupAPI intenta cargar su DLL ausente.
Otras causas del error 87
No apliques esta reparación sólo porque aparezca el número 87. Otras causas incluyen:
- una aplicación que pasa un parámetro inválido a otra API de Windows;
- binarios gráficos dañados o incompatibles;
- una ruta incorrecta del cargador de 32 o 64 bits;
- overlays de terceros o DLL inyectadas;
- archivos del sistema corruptos;
- un controlador instalado parcialmente por motivos ajenos a un co-instalador; o
- inestabilidad de hardware antes de completar la inicialización de la API.
Si la entrada obsoleta exacta de NVIDIA está ausente, SetupAPI no muestra la DLL faltante y el registro AMD está sano, la causa raíz confirmada en esta guía no coincide con esa máquina.
Preguntas frecuentes
¿El error 87 siempre se debe a un co-instalador antiguo de NVIDIA?
No. El error 87 es un error general de Windows. Esta guía se aplica únicamente cuando coinciden las evidencias del registro, la DLL ausente, SetupAPI, los dispositivos de componentes y el registro AMD.
¿Puedo ejecutar la reparación en un sistema mixto AMD y NVIDIA?
No. La reparación automatizada se niega intencionalmente cuando detecta un adaptador de pantalla NVIDIA presente. Una instalación legítima de NVIDIA todavía puede necesitar su co-instalador.
¿Por qué el instalador de AMD informó que terminó correctamente?
El dispositivo base de pantalla y sus componentes de software relacionados son trabajos de instalación separados. El controlador base puede finalizar mientras falla la coincidencia de componentes secundarios o el registro final de las API.
¿Por qué las DLL y los JSON de AMD ya estaban en el disco?
La preparación en DriverStore y la copia de archivos pueden completarse antes de crear los dispositivos de componentes y ejecutar el registro final. La presencia de archivos en el disco no demuestra que existan los valores del cargador de OpenGL o Vulkan en el registro.
¿La solución es cambiar PATH, TEMP u otra variable de entorno?
No en este caso confirmado. SetupAPI intentó una ruta DLL explícita bajo %SystemRoot%\System32. El co-instalador global de clase ausente y el registro AMD omitido explicaban el fallo sin un error de variables de entorno.
¿Primero debería reinstalar o bajar de versión el controlador AMD?
No automáticamente. Repetir el instalador mientras permanece el co-instalador obsoleto puede repetir la misma ruta rota de componentes. Diagnosticá y respaldá primero la condición raíz. Las regresiones de una versión de controlador son otra rama de diagnóstico.
Referencias
- Microsoft Learn: INF AddComponent Directive
- Microsoft Learn: Using a Component INF File
- Microsoft Learn: INF DDInstall.CoInstallers Section
Licencia y contribuciones
La guía y los scripts se publican bajo la Licencia MIT. Los reportes son bienvenidos, pero eliminá nombres de usuario, identificadores de instancias de dispositivos, hashes de DriverStore, logs crudos y otros identificadores específicos de la máquina antes de abrir un issue.