April 28th, 2025

Why did Windows 7, for a few months, log on slower if you have a solid color background?

Personally, I use a solid color background. It was the default in Windows 95,¹ and I’ve stuck with that bluish-green background color ever since. It’s sort of like my comfort food.

Imagine my surprise when someone pointed me to a support article titled “The Welcome screen may be displayed for 30 seconds during the logon process after you set a solid color as the desktop background in Windows 7 or in Windows Server 2008 R2.” Why is logon slower with a solid background?

After your logon has been authenticated, Windows sets up your desktop. There are a lot of things going on. The taskbar gets created. The components that are responsible for various system services are loaded and initialized. The desktop window is created and filled with icons. And the desktop background window loads up the desktop wallpaper and paints it to the screen.

The logon system waits for all of these pieces to report that they are ready, and when the all-clear signal is received from everybody, or when 30 seconds have elapsed, the logon system switches away from the Welcome screen.

Given that design, you can imagine the reason for the 30-second delay: It means that one of the pieces failed to report. Perhaps it was written like this:

InitializeWallpaper()
{
    if (wallpaper bitmap defined)
    {
        LoadWallpaperBitmap();
    }
}

LoadWallpaperBitmap()
{
    locate the bitmap on disk
    load it into memory
    paint it on screen
    Report(WallpaperReady);
}

The code to report that the wallpaper is ready was inside the wallpaper bitmap code, which means that if you don’t have a wallpaper bitmap, the report is never made, and the logon system waits in vain for a report that will never arrive.

Later in the article, it notes a related article that calls out that if you have the “Hide desktop icons” group policy enabled, then you might also suffer from the 30-second delay.

Group policies are susceptible to this problem because they tend to be bolted on after the main code is written. When you have to add a group policy, you find the code that does the thing, and you put a giant “if policy allows” around it.

// Original code
InitializeDesktopIcons()
{
    bind to the desktop folder
    enumerate the icons
    add them to the screen
    Report(DesktopIconsReady);
}

// Updated with group policy support

InitializeDesktopIcons()
{
    if (desktop icons allowed by policy)
    {                                   
        bind to the desktop folder
        enumerate the icons
        add them to the screen
        Report(DesktopIconsReady);
    }                                   
}

Oops, the scope of the “if” block extended past the report call, so if the policy is enabled, the icons are never reported as ready, and the logon system stays on the Welcome screen for the full 30 seconds.

Note that in both of these cases, it’s not that the logon is extended by 30 seconds. Rather, the Welcome screen stays on for the full 30 seconds rather than the actual time it took for all systems to report ready (which could be 5 seconds, or it could be 25 seconds, depending on your system’s performance).

If you look at the timestamps on the articles, you can see that the problem was fixed in November 2009, just a few months after Windows 7 was released in July 2009.

¹ Originally, I avoided bitmap backgrounds because they took up a lot of memory, and when you had only 4 or 8 megabytes of memory, eating three quarters of a megabyte of memory just for wallpaper was not a good return on investment.

Also, I tend to stick with default configurations because it makes bug filing easier. If the repro instructions are “install a system from scratch, then perform these steps”, you’re more likely to get traction than if you say “install a system from scratch, change these 50 settings from their defaults, and then perform these additional steps.” It’s much easier to justify a bug fix that affects the default configuration than a bug fix that requires that the user have changed settings from the default, particularly if those settings are obscure.

Topics
History

Author

Raymond has been involved in the evolution of Windows for more than 30 years. In 2003, he began a Web site known as The Old New Thing which has grown in popularity far beyond his wildest imagination, a development which still gives him the heebie-jeebies. The Web site spawned a book, coincidentally also titled The Old New Thing (Addison Wesley 2007). He occasionally appears on the Windows Dev Docs Twitter account to tell stories which convey no useful information.

14 comments

Discussion is closed. Login to edit/delete existing comments.

  • Kent Estes 2 weeks ago

    The damnng thng is that it went unresolved for so long. Dysfunctional companies make dysfunctional software!

  • Richard Deeming

    Reminds me of running Windows 3.1, switching to 800×600 / 256 colours, and watching the wallpaper slowly painting across each section of the screen. 🙂

  • IZUMIKun~ · Edited

    This reminds me of a similar experience in the original version of Windows XP. If someone decides to change default Shell application for some reason by changing Shell key’s value in Winlogon’s registry to any other program rather than original Explorer, Windows will be stuck at Welcome screen next logon regardless the alternative Shell application is actually loaded. In that case, use Ctrl+Alt+Del can
    directly bypass the Welcome screen.
    I’ve forgotten if this problem doesn’t exist in “Classic” (msgina) logon system or is fixed in further updates of XP. Windows 7 actually does well with alternative Shells.

  • Igor Levicki

    Heh, this reminds me of the policy “Wait for logon scripts” or whatever it is called — most admins will leave it on and if domain is not accessible (because it’s a work laptop you are logging into at home) you will be stuck for 120 seconds on “Please wait…” screen.

  • Jussi Räsänen

    What’s the hex code of the bluish-green background? 🙂

    • Brian Boorman 2 weeks ago

      A quick google search for “windows 95 background color” will tell you that it’s #00807F

    • Yuri Khan

      #008080 probably.

  • Yee Tsan Yip

    How about… use a 1 pixel bmp wallpaper and make it stretch?

    • 許恩嘉

      I guess it is 64 pixels.

  • Yuri Khan

    And the lesson here is that things that need to happen should be arranged to happen regardless of early exits. RAII object destructors in C++, defer in Go, (with-… BODY…) macros in Lisp, try/finally in Java, with CONTEXT-MANAGER: in Python, etc. I guess in C one could systematically put the doing code in one function and the reporting code in a wrapper, so that the person who bolts on the bypass immediately sees the one call that they need to disable and the other that they shouldn’t.

  • Joshua Hudson

    What’s with godot in the short summary?

    Incidentally I ran into this bug. It happens every time you reinstall since the bugged version is on shipped media. First set of updates, and the bug goes away.

    • Danielix Klimax

      Why not use sp1 version of install media?

      • Joshua Hudson

        The title of the blog is “The old new thing”; where we talk mostly about old stuff.

        SP1 hadn’t been released yet.

    • Raymond ChenMicrosoft employee Author

      The play Waiting for Godot is ostensibly about two people waiting for a third person (Godot), who never shows up.