Su Windows Server 2019 con RDS, dopo KB5035849 (Patch Tuesday 12/03/2024) molti ambienti hanno visto bloccarsi la stampa da stampanti reindirizzate in RDP. Qui trovi diagnosi tecnica, cause probabili, procedure risolutive e pratiche di gestione aggiornate a settembre 2025.
Sintesi tecnica del problema
Aspetto | Dettagli |
---|---|
Sintomo | Dopo l’installazione del cumulativo KB5035849 (12 marzo 2024) su Windows Server 2019 con RDS, la stampa tramite stampanti reindirizzate in RDP fallisce; l’utente riceve errori come The handle is invalid o impossibilità di connettersi alla stampante. L’accesso con mstsc /admin invece funziona. [1] |
Ambito | Session Host e Broker Windows Server 2019; qualunque client RDP con Easy Print o driver nativi; problema riproducibile su più ambienti e vendor. [2] |
Aggiornamenti coinvolti | KB5035849 (12 mar 2024) – origine del guasto. KB5037425 (25 mar 2024, OOB) – risolve perdita di memoria LSASS ma non la stampa. KB5039705 (23 mag 2024, OOB) – sostituisce alcuni file dello spooler; correzione parziale e non sempre efficace. [3] |
Come funziona Easy Print in RDP (e perché si rompe)
Easy Print usa il formato XPS per incapsulare i job di stampa generati nella sessione RDP. Sul Session Host, il servizio Print Spooler passa il rendering a componenti XPS (tra cui MXDWDRV.DLL
, il driver del “Microsoft XPS Document Writer”). Se questa DLL è incompleta o corrotta, lo spooler non riesce ad aprire un handle valido per i dispositivi reindirizzati e la stampa fallisce.
Le policy di sicurezza introdotte dopo CVE‑2021‑34481 (rafforzamento delle restrizioni Point‑and‑Print) possono impedire al client di caricare/aggiornare componenti durante la sessione utente. Il risultato è un vicolo cieco: Easy Print cerca il driver lato server, ma quel driver è danneggiato; il client non può sostituirlo perché bloccato dalle policy.
Diagnosi e causa probabile
- Il cumulativo di marzo distribuisce una versione tronca (≈ 840 KB) di
MXDWDRV.DLL
nella cartellaC:\Windows\System32\spool\drivers\x64\3
. La versione funzionante pesa tipicamente ≈ 880 KB (es.0.3.17763.4492
o precedente). [2] - Easy Print richiama lo stack XPS: con una DLL tronca, lo spooler non riesce a creare l’handle e restituisce errori generici (handle non valido) o mancata connessione alla stampante.
- Le restrizioni Point‑and‑Print, se impostate in modo rigido (solo amministratori), impediscono qualsiasi fallback del driver in sessione, aggravando il problema.
Verifica rapida sul server
- Apri una PowerShell elevata e controlla dimensione e versione del file:
Get-Item "C:\Windows\System32\spool\drivers\x64\3\MXDWDRV.DLL" | Select-Object Length,VersionInfo
Se la dimensione è ~ 840 KB, il file è con alta probabilità affetto. - Controlla i log: Event Viewer > Applications and Services Logs > Microsoft > Windows > PrintService > Operational (abilita il log se disattivato) per errori durante la creazione del job in sessione RDP.
- Prova comparativa:
- Sessione RDP normale: stampa reindirizzata fallisce.
mstsc /admin
: stampa dal server funziona → indica un problema nello stack della sessione RDS, non un guasto fisico della stampa.
Mappa decisionale delle soluzioni
Scenario | Intervento suggerito | Pro | Contro/Rischi |
---|---|---|---|
Produzione bloccata, necessità di ripristino immediato | Ripristino manuale di MXDWDRV.DLL con copia funzionante (≈ 880 KB) e riavvio dello spooler | Riparte subito; nessun riavvio host; minimo impatto utenti | Workaround: richiede una “gold copy” affidabile e controllo post‑patch |
Compliance patch prioritaria, finestre di manutenzione disponibili | Applicare cumulativi post‑luglio 2024 e verificare che la DLL aggiornata venga effettivamente distribuita | Soluzione allineata al canale ufficiale | Non sempre sovrascrive la DLL “fissata” nel driver store |
DLL rimane tronca dopo l’update | Pulizia del driver store con pnputil e reinstallazione componenti spooler | Elimina versioni “bloccate” del driver | Operazione delicata: richiede inventario e test |
Vincoli forti su Point‑and‑Print | Valutare GPO temporanea: RestrictDriverInstallationToAdministrators = 0 o Approved Servers | Permette al client di caricare il driver in sessione | Rischio sicurezza: usare solo come mitigazione temporanea |
Ambienti in refresh | Passaggio a Windows Server 2022/2025 LTSC per i nuovi Session Host | Stack di stampa aggiornato; problema non presente | Costo/complessità di migrazione |
Procedura dettagliata: ripristino di MXDWDRV.DLL
È la soluzione più diffusa e a basso rischio quando serve ripartire subito. [2]
Prerequisiti
- Una copia buona di
MXDWDRV.DLL
da un Server 2019 non affetto o da backup (≈ 880 KB, es.0.3.17763.4492
o precedente). - Permessi amministrativi sul Session Host.
- Finestra di 1–2 minuti per riavviare il servizio Print Spooler.
Passi operativi
- Blocca temporaneamente nuove sessioni o informa gli utenti.
- Apri PowerShell elevata ed esegui:
$spoolPath = "C:\Windows\System32\spool\drivers\x64\3" $goodDll = "\\fileserver\gold\MXDWDRV.DLL" # percorso della copia buona $backupDir = "$spoolPath\backupmxdw$(Get-Date -Format yyyyMMdd_HHmmss)" Stop-Service -Name Spooler -Force New-Item -ItemType Directory -Path \$backupDir -Force | Out-Null Copy-Item -Path "\$spoolPath\MXDWDRV.DLL" -Destination \$backupDir -ErrorAction SilentlyContinue Copy-Item -Path \$goodDll -Destination "\$spoolPath\MXDWDRV.DLL" -Force Start-Service -Name Spooler Verifica (Get-Item "\$spoolPath\MXDWDRV.DLL" | Select-Object FullName, Length, @{n="Version";e={$\_.VersionInfo.FileVersion}})
- Chiedi agli utenti di disconnettersi e rientrare o esegui un logoff forzato delle sessioni inattive; in molti casi la stampa riparte subito senza necessità di nuovo login.
Nota: in alcuni ambienti il file può essere in uso da processi di stampa residui. Se Stop-Service Spooler
non basta, termina eventuali spoolsv.exe
zombie o attendi il rilascio dell’handle.
Correzioni Microsoft e stato patch
- KB5037425 (25 mar 2024, OOB): mitiga perdita di memoria LSASS; non risolve il blocco di stampa RDP. [3]
- KB5039705 (23 mag 2024, OOB): aggiorna componenti dello spooler; ha risolto in alcuni ambienti ma non universalmente. [3]
- Cumulativi luglio 2024 e successivi: includono una DLL corretta; tuttavia, se la versione tronca è già “fissata” nel driver store, la sostituzione può non avvenire automaticamente.
Quando l’update non cambia nulla
Se dopo l’installazione delle patch la dimensione di MXDWDRV.DLL
resta ~ 840 KB, il problema è nel driver store. In questo caso:
- Inventaria i driver installati:
pnputil /enum-drivers > C:\Logs\DriverStore.txt
- Identifica i pacchetti MXDW correlati (
oemXX.inf
) e rimuovili con disinstallazione forzata:pnputil /delete-driver oem42.inf /uninstall /force
- Reinstalla il pacchetto cumulativo più recente o ripristina manualmente la DLL buona.
Molti amministratori riportano che pulizia del driver store + update recente → rimozione definitiva dell’anomalia. [4]
Policy e sicurezza: cosa toccare, cosa evitare
Per sbloccare un ambiente d’emergenza puoi allentare temporaneamente le restrizioni Point‑and‑Print. Valuta attentamente l’impatto sicurezza e ripristina le impostazioni appena possibile.
GPO/Registro | Impostazione | Effetto | Avvertenze |
---|---|---|---|
RestrictDriverInstallationToAdministrators | 0 (temporaneo) | Permette installazione driver di stampa in sessione utente | Espone a rischio se mantenuto; limitare l’ambito e la durata |
Point and Print – Approved Servers | Elenca solo i tuoi print server | Consente driver da fonti note | Richiede manutenzione dell’elenco |
Script di controllo post‑patching
Automatizza la verifica della DLL dopo ogni Patch Tuesday. Lo script seguente controlla una lista di Session Host, salva log e (opzionalmente) ripristina la DLL buona se trova la versione tronca.
param(
[Parameter(Mandatory=$true)][string[]]$Servers,
[Parameter(Mandatory=$true)][string]$GoldDllPath,
[switch]$AutoFix
)
$Report = @()
foreach ($s in $Servers) {
try {
$path = "\\$s\C$\Windows\System32\spool\drivers\x64\3\MXDWDRV.DLL"
$fi = Get-Item $path -ErrorAction Stop
$size = $fi.Length
$ver = $fi.VersionInfo.FileVersion
$status = if ($size -lt 900kb) { "SUSPECT" } else { "OK" }
if ($status -eq "SUSPECT" -and $AutoFix) {
Invoke-Command -ComputerName $s -ScriptBlock {
param($Gold)
Stop-Service Spooler -Force
Copy-Item -Path $Gold -Destination "C:\Windows\System32\spool\drivers\x64\3\MXDWDRV.DLL" -Force
Start-Service Spooler
} -ArgumentList $GoldDllPath
$status = "FIXED"
$fi = Get-Item $path
$size = $fi.Length
$ver = $fi.VersionInfo.FileVersion
}
$Report += [pscustomobject]@{
Server = $s; Size = $size; Version = $ver; Status = $status
}
} catch {
$Report += [pscustomobject]@{
Server = $s; Size = $null; Version = $null; Status = "ERROR: $($_.Exception.Message)"
}
}
}
$ts = Get-Date -Format "yyyyMMdd_HHmmss"
$csv = "C:\Logs\RDPPrintDLLAudit$ts.csv"
$Report | Export-Csv -NoTypeInformation -Path $csv
Write-Host "Report salvato in $csv"
$Report
Verifica end‑to‑end dopo il fix
- Dalla sessione RDP, stampa una pagina di prova su una stampante reindirizzata e verifica che lo spooler generi job XPS senza errori.
- Controlla il log PrintService/Operational per assenza di eventi di errore durante la creazione del job.
- Ripeti il test da un secondo client (versione RDP differente) per escludere fattori lato endpoint.
- Se usi anche driver nativi, verifica una stampante Easy Print e una con driver del produttore.
Stato aggiornato a settembre 2025
- Le patch da luglio 2024 in poi includono una MXDWDRV.DLL corretta, ma la distribuzione è stata incoerente: in presenza di driver store “bloccato”, la DLL ridotta resta in uso.
- Gli ambienti che hanno applicato KB5039705 o cumulativi successivi e ripulito il driver store (
pnputil /delete-driver oemXX.inf /uninstall /force
) riferiscono la scomparsa definitiva del problema. [4] - Non risultano KB ufficiali dedicati specificamente al malfunzionamento Easy Print su Server 2019; il tema appare solo in release notes generiche.
Checklist di triage veloce
- La stampa fallisce solo in RDP e solo per stampanti reindirizzate? → Sì → Vai a verifica DLL.
mstsc /admin
stampa correttamente? → Sì → Lo stack RDS/Easy Print è il probabile colpevole.MXDWDRV.DLL
è ~ 840 KB? → Sì → Ripristina la DLL o aggiorna + pulisci driver store.- Patch recenti installate ma DLL invariata? → Pulisci driver store e reinstalla.
- Vincoli Point‑and‑Print stringenti? → Valuta GPO temporanee per sbloccare il caricamento driver del client (solo se necessario).
Domande frequenti
Perché mstsc /admin
stampa mentre la sessione RDS normale no?
/admin
forza la sessione console (Session 0) e segue percorsi diversi per driver e reindirizzamenti; in molti ambienti ciò evita lo stack Easy Print. Se nella console la stampa funziona, la tua infrastruttura di stampa è sana e il problema è specifico del canale RDS/Easy Print.
Disattivare Easy Print risolve?
Può eludere il problema ma non è consigliato a lungo termine: perderesti i vantaggi di compatibilità e gestione centralizzata. Meglio ripristinare MXDWDRV.DLL
e mantenere Easy Print attivo.
È sicuro impostare RestrictDriverInstallationToAdministrators=0?
Solo come mitigazione temporanea e in ambienti controllati. Appena ripristinata la DLL o l’aggiornamento, torna alla configurazione sicura.
Serve riavviare il server?
No, di norma basta riavviare il servizio Print Spooler e far riconnettere le sessioni. In casi isolati, un riavvio può aiutare a rimuovere handle bloccati o cache difettose.
Buone pratiche raccomandate
- Valuta la versione di MXDWDRV.DLL
Get-Item "C:\Windows\System32\spool\drivers\x64\3\MXDWDRV.DLL" | Select Length,VersionInfo
Se la dimensione è ≈ 840 KB sostituisci manualmente o aggiorna con un cumulativo recente. - Mantieni un ambiente di test RDS dove applicare Patch Tuesday e OOB prima della produzione. [4]
- Automatizza il controllo dei file dello spooler con uno script post‑patching che confronti hash/size della DLL e ripristini la copia buona da un archivio centralizzato.
- Documenta il driver store dopo ogni aggiornamento:
pnputil /enum-drivers > C:\Logs\DriverStore_<data>.txt
- Pianifica migrazione a Windows Server 2022 o 2025 LTSC se il carico di patch e workaround diventa eccessivo.
Procedure di rollback (solo se indispensabile)
Come estrema ratio puoi rimuovere il cumulativo di marzo o ripristinare snapshot VM. Ricorda: operazione sconsigliata a lungo termine perché reintroduce vulnerabilità corrette.
# Elenco pacchetti installati
dism /online /get-packages /format:table
Rimozione di uno specifico pacchetto
dism /online /remove-package /packagename\:Package\for\RollupFix~\ /norestart
In breve
Il blocco della stampa RDP su Server 2019 nasce da una MXDWDRV.DLL corrotta introdotta con KB5035849. Finché tutte le macchine non applicano correttamente i cumulativi post‑luglio 2024 (e non mantengono nel driver store la DLL ridotta), la via più rapida e affidabile resta ripristinare la DLL funzionante o aggiornare + pulire il driver store. Per evitare regressioni, automatizza i controlli post‑patching e valuta una migrazione graduale a Server 2022/2025.
Riferimenti comunitari: [1] discussioni tecniche sul reindirizzamento stampanti RDP; [2] analisi di casi concreti su Server 2019 dopo il cumulativo di marzo; [3] note su aggiornamenti OOB di maggio 2024; [4] guide pratiche con esiti dei test su driver store e cumulativi. Le voci tra parentesi quadre nel testo rimandano a questi riferimenti.