Nel registro di Windows c'è una chiave che si chiama COM Name Arbiter e che tiene traccia delle porte seriali attualmente allocate sul sistema.
IL PROBLEMA
Delle volte in questo database risultano allocate porte seriali che in realtà non sono più in uso da nessun driver o software rendendo impossibile allocare tali porte per le proprie applicazioni. Questo è un caso molto diffuso se si usano chiavette USB BLUETOOTH che creano porte seriali virtuali.
Nel caso del mio laptop che non ha il BLUETOOTH io ne uso uno USB, l'inconveniente che si verifica e che alle volte il mio notebook con Windows XP si dimentica delle porte seriali virtuali già allocate dal software BLUETOOTH e delle volte quando ricollego la chiavetta ne reinstalla delle nuove senza disallocare quelle vecchie. Ad un certo punto mi trovavo sul mio portatile con ben 29 porte seriali allocate quando in realtà c'è n'era una sola usata dal driver del modem interno.
LA SOLUZIONE
Innanzitutto dobbiamo settare una variabile di sistema che ci permette di vedere in Gestione dispositivi di Windows anche i driver delle periferiche installate ma attualmente non caricate/collegate al sistema.
Aprite il prompt dei comandi oppure dal pulsante start della barra delle applicazioni cliccate su Esegui... e digitate il seguente comando:
set devmgr_show_nonpresent_devices=1
seguito dal comando:
devmgmt.msc
appena la finestra Gestione dispositivi appare andate sulla voce di menu Visualizza e cliccate su Mostra dispositivi nascosti, a questo punto sarete in grado di vedere tutte le periferiche nascoste/non collegate per cui sono stati installati dei driver. Quindi adesso potete vedere tutte le Porte COM allocate nel vostro sistema. Le icone delle periferiche nascoste appaiono leggermente oscurate.
Possiamo disinstallare semplicemente le periferiche nascoste cliccandoci sopra con il pulsante destro del mouse e scegliere l'opzione Disinstalla. Così possiamo disinstallare le porte seriali allocate ma non utilizzate.
COM Name Arbiter
La disinstallazione così come spiegata sopra purtroppo non aggiorna il database delle porte allocate e quindi le porte che avete disinstallato risultano ancora utilizzate dal sistema.
Se ad esempio in Gestione dispositivi aprite le proprietà del vostro modem( se l'avete) o di una porta seriale e andate sui parametri avanzati delle impostazioni della porta e aprite il combobox relativo al numero della porta, si aprirà una lista dove vedrete che le porte che avete appena disinstallato sono ancora in uso.
Bisogna aggiornare il database di COM Name Arbiter e per farlo dobbiamo accedere al registro di sistema.
Carichiamo il regedit.exe sempre da Esegui... oppure dal prompt dei comandi che potete aprire digitando cmd sempre da Esegui...!
Dobbiamo cercare la seguente chiave:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\COM Name Arbiter\ComDB
e dobbiamo modificarne il contenuto.
Questa operazione purtroppo non è facile perché la chiave contiene un valore binario che rappresenta una mappa delle porte allocate.
Il contenuto della chiave è mostrato da regedit in esadecimale diviso in byte, ad esempio il primo byte conterra 0x03 se avete allocato le porte COM1 e COM2. Il valore si calcola nel seguente modo: 0x03=20+21; il primo byte può contenere informazioni per al massimo 8 porte seriali quindi COM1-COM8, le porte COM9-COM16 sono contenute nel secondo byte e così via e il valore si calcola allo stesso modo del primo ovvero se abbiamo allocato le porte COM9 e COM10 il valore sarà: 0x03=20+21.
Effettuate le modifiche richieste e riavviate il computer...problema risolto.