Desde que se publicaron los parches acumulativos de seguridad de junio 2024 para Windows 10 (KB5039211) y Windows 11 (KB5039212), miles de usuarios han visto cómo sus impresoras de etiquetas —sobre todo DATAMAX, Murrplastik y equipos basados en los mismos controladores— dejan de imprimir o arrojan etiquetas en blanco al enviarse trabajos desde VBA en Access. El fallo se repite en instalaciones limpias y escenarios corporativos con servidores de impresión.
Descripción del problema
Las actualizaciones mencionadas introducen cambios en el subsistema de impresión (spooler y GDI) que alteran la interpretación del printer command language (PCL/ZPL) cuando el trabajo se origina en aplicaciones que usan Automation VBA —habitual en bases de datos Access que generan etiquetas desde formularios o informes.
Los síntomas principales son:
- La cola de impresión permanece “Enviando a impresora” indefinidamente.
- Se expulsa el medio, pero la etiqueta aparece en blanco.
- Algunos envíos manuales desde el cuadro de diálogo Imprimir sí funcionan, lo que despista en el diagnóstico.
Por qué ocurre
Ingenieros que inspeccionaron los builds afectados detectaron que el spooler empuja los trabajos PCL/ZPL con un flag de compatibilidad GDI distinto al de versiones previas. Si el DEVMODE
del controlador no expone ciertos atributos en blanco o cero, el spooler interpreta que el trabajo es “seguro” para rasterizar, inyectando metadatos que corrompen la secuencia de control cruda que espera la impresora térmica.
Modelos afectados conocidos
- DATAMAX I‑Class Mark II
- Murrplastik MP-Serie
- TSC MX240P (controlador DATAMAX heredado)
- SATO CL‑NX (cuando se instala como DATAMAX por compatibilidad)
- Otros equipos basados en firmware Honeywell/Intermec heredado
Importante: impresoras Zebra directas suelen librarse porque su controlador implementa aislamiento de proceso y ofrece un canal RAW dedicado, aunque en ciertos montajes similares se han detectado retrasos de cola.
Soluciones aplicadas y alternativas
Enfoque | Qué hace | Pros | Contras |
---|---|---|---|
Desinstalar el parche conflictivo | Quitar KB5039212/11. | Recupera la impresión al instante. | Se pierden los parches de seguridad de junio. |
Ocultar o pausar la actualización | Uso de wushowhide.diagcab o pausa de Windows Update para que la KB no reaparezca. | Mantiene estable la impresión mientras llega la corrección. | Riesgo de vulnerabilidades si se prolonga. |
Instalar el acumulativo de julio 2024 (o posterior) | Microsoft liberó un nuevo CU que, según varios usuarios, restablece la impresión en Win 10 y Win 11. | Solución permanente sin sacrificar seguridad, si tu entorno queda corregido. | No todos los entornos confirman el arreglo; puede requerir pruebas previas. |
Impresión RAW vía winspool.drv | Enviar directamente el código de la impresora desde VBA (ya probado con Zebra). | Evita depender de los informes de Access y de GDI. | Requiere adaptar código y conocer comandos de la impresora. |
Actualizar o reinstalar controladores | Se probó, pero no resolvió el fallo en la mayoría de los casos. | Fácil de intentar. | Normalmente ineficaz con esta incidencia. |
Pasos recomendados
- Verificar CU de julio 2024 o posterior
En muchas instalaciones, las impresoras resucitan al instalar el parche siguiente. Comprueba en winver o en Historial de actualizaciones que figura el CU de julio (o superior) y reinicia el spooler. - Plan B: desinstalar la KB de junio
Si el CU de julio no ayuda y tienes permisos de desinstalación, ejecuta: > wusa /uninstall /kb:5039212 o > wusa /uninstall /kb:5039211 Después bloquea la reinstalación conwushowhide.diagcab
o las opciones de Pausa. - Entornos corporativos sin desinstalar
Cuando la política impide quitar parches:- Implementa impresión RAW desde VBA (ver código abajo).
- Escala un caso a Microsoft: aporta dump del spooler, registro de eventos y modelo de impresora.
- Estrategia a futuro
- Ensaya cada Patch Tuesday en un entorno aislado antes de producción.
- Conserva copias del firmware y controladores firmados para restauración rápida.
Impresión RAW desde VBA en Access
El siguiente módulo envía la cadena ZPL/PCL a la impresora sin pasar por el motor GDI. Se basa en la API clásica de Windows (winspool.drv
). Ajusta la variable strPrinter
al nombre de tu impresora compartida:
Option Explicit
Private Declare Function OpenPrinter Lib "winspool.drv" _
Alias "OpenPrinterA" (ByVal pPrinterName As String, phPrinter As Long, _
pDefault As Any) As Long
Private Declare Function ClosePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function StartDocPrinter Lib "winspool.drv" _
Alias "StartDocPrinterA" (ByVal hPrinter As Long, ByVal Level As Long, _
pDocInfo As DOCINFO1) As Long
Private Declare Function EndDocPrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function StartPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function EndPagePrinter Lib "winspool.drv" (ByVal hPrinter As Long) As Long
Private Declare Function WritePrinter Lib "winspool.drv" (ByVal hPrinter As Long, _
pBuf As Any, ByVal cdBuf As Long, pcWritten As Long) As Long
Private Type DOCINFO1
pDocName As String
pOutputFile As String
pDatatype As String
End Type
Public Function SendRawZPL(strZPL As String) As Boolean
Const RAW_DATATYPE As String = "RAW"
Dim hPrinter As Long, dwWritten As Long
Dim di As DOCINFO1, ret As Long, strPrinter As String
strPrinter = "\\SERVIDOR\IMPRESORA_DATAMAX"
di.pDocName = "LabelJob"
di.pDatatype = RAW_DATATYPE
If OpenPrinter(strPrinter, hPrinter, ByVal 0&) Then
If StartDocPrinter(hPrinter, 1, di) Then
Call StartPagePrinter(hPrinter)
ret = WritePrinter(hPrinter, ByVal strZPL, Len(strZPL), dwWritten)
Call EndPagePrinter(hPrinter)
Call EndDocPrinter(hPrinter)
End If
Call ClosePrinter(hPrinter)
SendRawZPL = (ret <> 0)
End If
End Function
Ventajas de este enfoque:
- No depende de los informes de Access ni de GDI, por lo que esquiva cualquier cambio de spooler.
- Funciona igual en Windows 10 y 11, siempre que el puerto de la impresora soporte RAW.
Inconvenientes:
- Requiere construir la cadena ZPL/PCL manualmente o con una librería.
- No se benefician de la previsualización WYSIWYG.
Buenas prácticas de validación en “Patch Tuesday”
Para evitar que un parche de Windows interrumpa procesos críticos:
- Laboratorio de preproducción: replica las impresoras, drivers y macros de Access. Ejecuta un lote de pruebas automatizadas después de instalar cada CU.
- Control de versiones de drivers: mantén los paquetes
.inf
firmados y sus certificados en un repositorio interno. Así podrás volver atrás sin conectar los equipos a Internet. - Monitorización: habilita el registro del spooler en Nivel 4 (Verbose) para detectar cambios en el orden de llamadas. Un simple dif entre el log pre‑CU y post‑CU revela alteraciones como la de KB5039212.
- Política de pausa selectiva: Windows Update permite aplazar parches hasta 35 días. Define un calendario rotativo que garantice, al menos, una semana de pruebas antes de producción.
Preguntas frecuentes
¿Actualizar el firmware de la impresora ayuda? No en este caso. El problema nace en el spooler; el firmware solo influye si incluye mitigaciones para datos ilegales, lo cual es raro. ¿Serviría instalar un puerto TCP/IP genérico? Sí, algunos usuarios han recuperado la impresión configurando la impresora como “Dispositivo TCP/IP” y desactivando el protocolo LPR, pero no es garantía universal. ¿Afecta a servidores de impresión Windows Server 2019/2022? No directamente: los CU problemáticos son de cliente. Sin embargo, si haces impresión remota (cliente envía Spool en modo empaquetado), el destino puede heredar el mismo flag errado. ¿Microsoft admitió el error? Según canales de soporte interno, la compañía catalogó el issue como reproducible e investiga un roll‑back protector para el spooler. No hay KB Known Issue pública aún.
Conclusión
KB5039212 y KB5039211 demostraron que incluso parches de seguridad rutinarios pueden disparar efectos colaterales en flujos de trabajo nicho como la impresión de etiquetas industriales. Mientras Microsoft prepara la corrección definitiva, las vías más seguras son instalar el CU de julio 2024 (si resuelve en tu entorno) o adoptar impresión RAW/pausa de actualización hasta validar un nuevo parche. Implementar laboratorios de ensayo cada Patch Tuesday y tener rutas de vuelta rápida se convierte en requisito imprescindible para evitar paradas de producción.