Segredos do WindowsOs ícones de 16 bits estão tão fora de moda

Raymond Chen

Como observei na coluna Segredos do Windows de fevereiro de 2008, os recursos desapareceram mesmo do Windows®. Eles costumam fazer isso lentamente e de maneira quase imperceptível com a equipe de um produto comemorando em silêncio o evento sempre que ele acontece. Outro recurso que sumiu do Windows Vista® é a possibilidade do código de 32 bits acessar ícones armazenados em módulos de 16 bits – EXEs e DLLs em sua maioria.

Antes de ter tudo funcionando, lembre-se de que o código de 16 bits pode acessar ícones armazenados em módulos de 16 bits tranqüilamente; isso tudo acontece dentro da camada de emulação de 16 bits. O que desapareceu foi a possibilidade de acessar esses ícones no código de 32 bits ou mais especificamente a possibilidade da extração do ícone de 32 bits funcionar como ExtractIcon no carregamento deles na DLL de 16 bits.

O código de 32 bits que extrai ícones dos módulos de 16 bits não tem o privilégio de usar funções de kernel como, por exemplo, FindResource para localizar o ícone no arquivo. Na verdade, o código deve implementar seu próprio minicarregador que analisa o cabeçalho do módulo de 16 bits, recorre à tabela de recursos e, em seguida, analisa a tabela em busca do recurso do ícone desejado. Somente depois de fazer tudo isso é que o código de 32 bits pode finalmente converter os pixels em um ícone.

  (Clique na imagem para aumentar a exibição)

Como é possível imaginar, o código que faz isso é muito antigo e frágil. Há muitas oportunidades para erros durante a análise de binários que poderiam ser corrompidos por engano ou por más intenções. A equipe de desempenho solicitará que algumas alterações sejam feitas na forma como o arquivo é aberto para melhorar o desempenho em redes, uma vez que modos de abertura e de compartilhamento diferentes têm conseqüências diferentes em termos de cache na rede. E a equipe de confiabilidade pode pedir que o código de análise seja reescrito para impedir o uso de arquivos mapeados para a memória. Por fim, o custo de manutenção desse tipo de código começa a exceder o valor que ele oferece. Quero dizer, mesmo, quem ainda escreve programas de 16 bits, certo?

Agora, os programas de 16 bits continuarão sendo executados enquanto a camada de emulação de 16 bits estiver lá. (Sim, o Windows Vista de 64 bits não tem uma camada de emulação de 16 bits, mas esse não é um retrocesso em relação ao Windows XP; o Windows XP de 64 bits também não tinha uma camada de emulação de 16 bits. Não melhorou, mas também não piorou.)

Tudo o que você está perdendo no Windows Vista é a possibilidade de executar ExtractIcon usando o programa de 32 bits e conseguir um ícone de uma DLL de 16 bits. Se você tiver um atalho para um programa de 16 bits no menu Iniciar, o ícone desse atalho agora aparecerá como sendo o ícone de um programa genérico porque o Windows Explorer não pode mais extrair o ícone do programa de 16 bits do EXE principal. A perda não é grande. Mas caso isso seja, de fato, um incômodo, é possível editar as propriedades do atalho e dar a ele um ícone de um módulo de 32 bits.

O único local em que vi a perda desse recurso se tornar um problema está nas bibliotecas de ícones produzidas por uma ferramenta para edição de ícones específica. Por algum motivo, esse programa usa como padrão salvar os ícones como recursos nas DLLs de 16 bits, o que significa não ser mais possível acessar esses ícones usando código de 32 bits. É claro que a solução alternativa mais simples é salvar novamente essas bibliotecas de ícones como recursos em DLLs de 32 bits.

Tenho certeza de que alguém acabará escrevendo – se é que já não escreveu – um pequeno programa para extrair todos os ícones de uma DLL de 16 bits e, em seguida, criando uma DLL de 32 bits apenas de recurso com esses ícones. Dessa forma, as pessoas que tiverem ícones antigos em DLLs de 16 bits podem continuar usando-os em atalhos no menu Iniciar. Mas tenho que admitir: se escrever esse programa, você provavelmente não encontrará ninguém que, de fato, precise dele. Número de solicitações para um programa como esse enviados à equipe de interface do usuário do Windows: zero.

Raymond Chen possui um site, The Old New Thing, e escreveu um livro homônimo para tratar do histórico do Windows e da programação Win32. E deixa a passagem livre.

© 2008 Microsoft Corporation e CMP Media, LLC. Todos os direitos reservados. A reprodução parcial ou completa sem autorização é proibida..