Em 2009, com o lançamento do Windows 7, alguns usuários começaram a notar um comportamento estranho: a tela de boas-vindas demorava até 30 segundos para desaparecer após o login. O mais curioso? Isso acontecia principalmente quando o usuário escolhia uma cor sólida como papel de parede da área de trabalho.
Na época, a Microsoft confirmou o problema e lançou um hotfix em novembro daquele ano para o Windows 7 e o Windows Server 2008 R2. Mas só recentemente tivemos uma explicação técnica mais completa, dada por Raymond Chen, engenheiro veterano da Microsoft e autor do blog The Old New Thing.
O que causava esse atraso?
Chen explicou que, ao fazer login no Windows, o sistema precisa carregar vários componentes ao mesmo tempo:
- Barra de tarefas
- Serviços do sistema
- Ícones da área de trabalho
- Papel de parede
A transição da tela de boas-vindas só acontece depois que todos esses componentes avisam que estão prontos. Se algum deles não enviar esse “sinal de pronto”, o sistema espera até o tempo limite de 30 segundos antes de continuar.
O problema era justamente com o papel de parede. Veja o trecho de código simplificado:
InitializeWallpaper()
{
if (wallpaper bitmap defined)
{
LoadWallpaperBitmap();
}
}
LoadWallpaperBitmap()
{
locate the bitmap on disk
load it into memory
paint it on screen
Report(WallpaperReady);
}Essa função só envia o sinal Report(WallpaperReady) se houver uma imagem de papel de parede definida. Se o usuário optasse por uma cor sólida, essa parte do código era simplesmente ignorada — e o sistema ficava esperando por um sinal que nunca viria.
Outro caso parecido: esconder os ícones da área de trabalho
Esse mesmo tipo de atraso também podia acontecer se o usuário ativasse a política de grupo “Ocultar ícones da área de trabalho”. Veja como isso funcionava:
// Código com política de grupo
InitializeDesktopIcons()
{
if (desktop icons allowed by policy)
{
bind to the desktop folder
enumerate the icons
add them to the screen
Report(DesktopIconsReady);
}
}Se a política bloqueasse os ícones, o sinal DesktopIconsReady também nunca era enviado — e o sistema esperava à toa.
O que isso nos ensina?
Chen ressalta que o login em si não estava demorando mais — o que acontecia era que a tela de boas-vindas permanecia visível por 30 segundos, esperando por um componente que já tinha sido “pulado” silenciosamente pelo sistema.
Esse comportamento é um ótimo exemplo de como pequenos detalhes no código podem ter impactos inesperados na experiência do usuário.
