MicrosoftのエンジニアであるRaymond Chen氏は4月28日(米国時間)、「Why did Windows 7, for a few months, log on slower if you have a solid color background?」において、Windows 7で単色のデスクトップ背景を設定した際にログオンが遅延する問題について解説した。

この問題は、Windows 7およびWindows Server 2008 R2において一時的に発生していたもので、単色の背景を設定するとログオンプロセスが最大30秒遅延する現象として報告されていた。

  • Why did Windows 7、for a few months、log on slower if you have a solid color background? - The Old New Thing

    Why did Windows 7, for a few months, log on slower if you have a solid color background? - The Old New Thing

原因は特定のコンポーネントから準備完了が報告されないこと

Chen氏によれば、問題の原因は壁紙の読み込み処理における設計ミスにあったという。Windows 7では、ログオン後のデスクトップの初期化プロセスにおいて、各コンポーネントが準備完了を報告するか、または30秒が経過するまで、「ようこそ」の画面が表示され続ける。このコンポーネントには、タスクバーの作成、システムサービスの初期化、デスクトップアイコンの描画、壁紙の読み込みなどが含まれる。

​壁紙にビットマップ画像が設定されている場合には、読み込み後に「WallpaperReady」という準備完了の報告が行われる。​しかし、単色の背景が設定されている場合には、この報告が行われないという問題があった。それは、WallpaperReadyの報告を行うコードが、ビットマップ画像を読み込む関数内に定義されていたためである。その結果、ログオンプロセスは報告を待ち続け、30秒の遅延が発生することになった。

デスクトップアイコン非表示の場合も遅延発生

さらにChen氏は、グループポリシーで「デスクトップアイコンを非表示にする」設定をしている場合も、同様に30秒の遅延が発生することに言及している。​これは、デスクトップアイコンの初期化処理がポリシーによりスキップされることで、「DesktopIconsReady」の報告が行われないためだという。

​グループポリシーの実装は、メインのコードが書かれた後に追加されることが多いために、このような問題の影響を受けやすいとChen氏は指摘している。

ソフトウェアの設計では、システム全体の整合性を保つために、すべてのコードパスで必要な状態報告が行われるように細心の注意を払う必要がある。Windows 7の起動プロセスというクリティカルな処理で、このような不具合を残したままリリースされたという事実は極めて興味深い。