Windows ConfidentialLe icone a 16 bit sono così fuori moda

Raymond Chen

Come ho indicato nella rubrica del febbraio 2008 Windows Confidential, le funzioni talvolta scompaiono da Windows®. Tale "sparizione" avviene generalmente in modo lento e assolutamente impercettibile e, ogni volta, il team di un prodotto celebra l'evento senza troppo scalpore. Un'altra funzione che è svanita in Windows Vista® è la capacità per il codice a 32 bit di accedere alle icone memorizzate in moduli a 16 bit, soprattutto gli EXE e le DLL a 16 bit.

Prima di ottenere i risultati prestabiliti, è bene considerare che un codice a 16 bit può accedere alle icone memorizzate in moduli a 16 bit e che il tutto avviene nel livello di emulazione a 16 bit. La funzionalità "scomparsa" è la capacità di accedere a tali icone da un codice a 32 bit o, in modo più specifico, la possibilità che l'estrazione di icone a 32 bit operi come la funzione ExtractIcon per caricare tali icone dalla propria DLL a 16 bit.

Il codice a 32 bit che estrae le icone da moduli a 16 bit non prevede l'utilizzo di funzioni kernel come, ad esempio, FindResource per individuare l'icona nel file. Tale codice deve, invece, implementare il proprio mini-programma di caricamento che analizza l'intestazione di moduli a 16 bit, esegue ricerche nella tabella di risorse e quindi analizza tale tabella per individuare la risorsa dell'icona desiderata. Solo dopo avere svolto tutte le suddette attività, il codice a 32 bit converte infine i pixel in un'icona.

  (Fare clic sull'immagine per ingrandirla)

Come si potrà immaginare, il codice che esegue tale operazione è obsoleto e instabile. Esistono numerose possibilità di errore durante l'analisi di binari che potrebbero risultare danneggiati, per errore o per intento di un malintenzionato. Il team di prestazioni richiederà le modifiche alla modalità di apertura del file per migliorare le prestazioni sulle reti, poiché differenti modalità di apertura e condivisione provocano conseguenze diverse per gli effetti di caching della rete. Il team di affidabilità potrebbe richiedere la riscrittura del codice di analisi per evitare di utilizzare file connessi alla memoria. Alla fine, il costo di gestione di questo tipo di codice inizia a superare il valore offerto. Per spiegarmi meglio, chi è che scrive ancora programmi a 16 bit?

Attualmente, i programmi a 16 bit funzionano soltanto grazie alla presenza del livello di emulazione a 16 bit. È vero, Windows Vista a 64 bit non dispone di tale livello, ma ciò non rappresenta un passo indietro rispetto a Windows XP, poiché neanche Windows XP a 64 bit disponeva di un livello di emulazione a 16 bit. Quindi non sono stati compiuti progressi in tal senso, ma non si è neanche tornati indietro.

La caratteristica che non è più presente in Windows Vista è la possibilità di eseguire ExtractIcon dal proprio programma a 32 bit e ottenere un'icona da una DLL a 16 bit. Se si dispone di un collegamento ad un programma a 16 bit nel proprio menu Start, l'icona per tale collegamento verrà visualizzata come icona di programma generico, poiché Esplora risorse di Windows non consente più l'estrazione dell'icona del programma a 16 bit dal relativo EXE principale. Non è una gran perdita. Ma se si desidera recuperare tale funzionalità, è possibile modificare le proprietà del collegamento e assegnare a tale collegamento un'icona da un modulo a 32 bit.

L'unico contesto in cui ho notato che l'assenza di tale funzione rappresenta un problema è nelle librerie di icone prodotte da un particolare strumento di modifica icone. Per qualche motivo, tale programma salva per impostazione predefinita le proprie icone come DLL a 16 bit, il che significa che non è più possibile accedervi da un codice a 32 bit. Ovviamente, la soluzione più semplice consiste nel salvare di nuovo tali librerie di come risorse in DLL a 32 bit.

Sono certo che alla fine qualcuno, se non è ancora stato fatto, scriverà un programmino per estrarre tutte le icone da una DLL a 16 bit per poi creare una DLL di sole risorse a 32 bit con tali icone, per consentire a coloro che dispongono di icone obsolete in DLL a 16 bit di continuare ad utilizzarle in collegamenti del menu Start. Ma devo ammettere che, se mai si scriverà questo programma, probabilmente non si troverà nessuno che ne avrà realmente bisogno. Il numero di richieste per un programma del genere pervenute al team dell'interfaccia utente di Windows: zero.

Raymond Chen, The Old New Thing, così come nell'omonimo libro, vengono illustrate la storia di Windows e la programmazione in Win32. La sua è un'analisi attenta e obiettiva.

© 2008 Microsoft Corporation e CMP Media, LLC. Tutti i diritti riservati. È vietata la riproduzione completa o parziale senza autorizzazione.