単色背景を使うと Windows 7 のログオン画面が30秒間表示された理由
(devblogs.microsoft.com)- Windows 7 と Windows Server 2008 R2 では、単色のデスクトップ背景を使うと、ログオン中の Welcome 画面が最大 30秒 残ることがあり、原因は準備完了シグナルの欠落だった
- ログオン システムは、タスク バー、システム サービスの構成要素、デスクトップ ウィンドウ、背景画像の表示などがすべて 準備完了 を報告するか、30秒が経過するまで Welcome 画面を切り替えない
- 背景画像コードが ビットマップ背景 がある場合にだけ
Report(WallpaperReady)を呼び出していたため、ビットマップのない単色背景では待機条件が最後まで満たされなかった - 「デスクトップ アイコンを非表示にする」グループ ポリシー も同じパターンで、
Report(DesktopIconsReady)の呼び出しが条件文の中に束縛されると、アイコン準備の報告が抜け落ちることがある - 実際にログオンが常に30秒長くなったわけではなく、本来なら5秒や25秒で終わっていたはずの準備処理とは無関係に、Welcome 画面が 30秒のタイムアウト まで維持される現象だった
単色背景で Welcome 画面が長く残った理由
- ログオン認証が終わると、Windows はユーザーの デスクトップ環境 を構成する
- タスク バーの作成
- 各種システム サービスを担当する構成要素の読み込みと初期化
- デスクトップ ウィンドウの作成とアイコン表示
- デスクトップ背景ウィンドウで背景画像を読み込み、画面に描画
- ログオン システムは、各構成要素が準備できたと報告するまで待機する
- すべての構成要素が準備完了を報告すると Welcome 画面から切り替える
- または 30秒 が経過すると Welcome 画面から切り替える
- 単色背景の問題は、背景画像の準備報告が ビットマップ読み込みコードの内部 にあったために発生した
- ビットマップ背景が定義されていれば、ファイルを見つけ、メモリに読み込み、画面に描画したあとで
Report(WallpaperReady)を呼び出す - 単色背景のようにビットマップがない場合、そのコード パスは実行されず、
WallpaperReadyの報告が発生しない - ログオン システムは来るはずのない報告を待ち続け、30秒の制限に達する
- ビットマップ背景が定義されていれば、ファイルを見つけ、メモリに読み込み、画面に描画したあとで
グループ ポリシーでも繰り返された準備シグナルの欠落
- 関連するサポート文書には、「デスクトップ アイコンを非表示にする」グループ ポリシー を有効にした場合でも、30秒の遅延が発生しうると書かれている
- グループ ポリシーは既存コードの上に後から追加されることが多く、
「ポリシーが許可すれば実行」のような条件文で包まれやすい- 元のデスクトップ アイコン初期化コードは、デスクトップ フォルダーにバインドし、アイコンを列挙し、画面に追加したあとで
Report(DesktopIconsReady)を呼び出す - グループ ポリシー対応を追加する際に、このブロック全体がポリシー条件文の中に入ると、アイコン非表示ポリシーが有効な場合に準備完了の報告も実行されなくなる
- 元のデスクトップ アイコン初期化コードは、デスクトップ フォルダーにバインドし、アイコンを列挙し、画面に追加したあとで
- この現象は、ログオン処理そのものに追加で30秒かかることを意味しない
- システム性能によって、もともとすべての準備報告が終わる時間は 5秒 のことも 25秒 のこともある
- 問題がある場合、Welcome 画面は実際の準備時間とは無関係に30秒のタイムアウトまで維持される
- 文書のタイムスタンプによれば、この問題は Windows 7 が 2009年7月 にリリースされた数か月後、2009年11月 に修正された
- ビットマップ背景を避けていた理由としては、過去の 4MB または 8MB メモリ環境では、背景画像だけで約 0.75MB を使うことが負担だった点もある
1件のコメント
Hacker News のコメント
単色背景を好む立場として、こういう単純な好みがしばしば奇妙なラビットホールにつながるのはいつも驚き
最新の macOS では、カスタムの単色背景を設定しようとすると、まぶしい白い画面しか表示されない: https://discussions.apple.com/thread/256029958?sortBy=rank
GNOME は単色背景の設定 UI をすべて削除したが、複数の設定キーを手動で変更すれば技術的にはまだ可能で、そのキーもバージョンごとにランダムに変わっているように見える: https://www.tc3.dev/posts/2021-09-04-gnome-3-solid-color-bac...
結局、少数のユーザーのために中途半端に残された機能に見えるので、きちんとサポートするか、すっきり削除するほうがよい。RGB 値をそのまま入れたいだけだが、今の状態なら不安定な背景色ロジックより、よく管理された単一の壁紙システムのほうがましだと思う
wallpaper type: plain colorを選ぶと カラーピッカー で指定できる適用先の画面も表示され、すべての画面に一括適用するブール値オプションもある
現代のスマホディスプレイでは電力面でも合理的で見た目も悪くないのに、標準オプションや設定のワンタップ切り替えであるべきことが、不信、検索、諦めを経る雑用になっていた
以前の OS X では 20 年以上ちゃんと動いていた機能なので、System Preferences の書き直し と関係がありそうだ
デスクトップショートカットが世代を経て乱用されたせいで、デスクトップを表示すること自体が画面スペースの無駄になり、気をつけていても結局は散らかった荒れ地になる。Windows では特にそうで、デスクトップを何の用途にも使わず、複数モニターに常にウィンドウを出しておくほうに慣れてしまった
この 25 年間 Windows の世界を避けてきて、ここ数年で企業環境に戻ってみると、Microsoft のツールでこういうパターンを何度も見る
セキュリティ上の問題で Teams は読み込まれないのに通知にはメッセージ全文が表示されたり、Word のクラウド版で数語入力するか文書全体を貼り付けた後になってセキュリティチェックが追いつき、秘密度ラベルの設定を要求したりする
Microsoft の Web アプリのソフトウェアアーキテクチャが非常に悪いことの兆候に見え、デスクトップアプリも例外ではなさそうだ
その後で権限要求が出て、拒否するとプレビューが消えた
ありきたりなユースケースでは非常にうまく動くが、カバーしていない境界ケースに出くわすとすぐ奇妙な問題にぶつかる。開発者の腕が悪いという評判はないので、企業文化や仕事の進め方のせいかもしれないし、巨大なユーザー基盤では 80% がビジネス的に最適なのかもしれない。それでも外部開発者の立場では、できれば Microsoft 製品を避けたくなる
5 年前には完璧にスリープしていたノート PC が、今では CPU、ファン、ハードディスクが回り続ける 24 時間ゾンビになっている
記事で言われているのと似た愚かな変更が、まともに動いていた機能を壊したのであり、10 年前のノート PC がスリープ中にも AI を動かして盗み聞きした内容に基づく広告を提案できるようにする最新のくだらない構想の邪魔になるから、誰も直さないのだと確信している
これはその頃始まったであろう慣行とつながっている: スプラッシュ画面 を一定時間だけ見せた後、ソフトウェアが完全に起動する前にユーザー環境を先に見せる方式
OS もアプリも、「アプリの起動が遅すぎる」という印象を避けるためにそうしていたのだろうと疑っていた。今では、使う前にソフトウェアが本当に読み込まれたのか推測しなければならない
その後でようやく、下位のソフトウェアがすべて読み込まれるのをぼんやり待っている 応答しない UI スレッド を目にする
ローディング画面に永遠に閉じ込められて別の OS で起動して修復しなければならない状況よりは、半分壊れていてもとにかく使えるデスクトップのほうがまし、という判断だ
何かをすると UI は読み込み中/進行中のホイールを表示するが、実際には延々と時間がかかり、Web ページの起動時には空白画面にプレースホルダーのバーやぼやけた色の画像が出る。これがいわゆるレスポンシブデザインだというのだから
ときにはシステムが実際に読み込まれたと 楽観的に扱う ほうが、ユーザーにとってよいこともある
デフォルト設定をほぼどこでも使うやり方を覚えた
カスタマイズを保守するのは面倒すぎるので、単に気にしないのがいちばん簡単だ。例外は、どこかの謎のファイルに同期されている VS Code の設定約50行で、おそらく GitHub のサーバー上にあるのだろうが、自分が見られる場所にはない
個人のコンピュータでは stow を使い、リモートマシンではコピー&ペーストしている。これらのツールは非常に安定しているので、Debian stable に移っても問題ないところが気に入っている
数年前の Sublime Text のバックアップをそのまま復元しても、自分のユーザー設定は今でも動作する
定期的なリマインダーのように言うなら、nix は実際に良い
「バグがあり、
nixos-rebuild build-vm --flake "github:user/repo#test-vm" && ./result/bin/run-*-vmで再現用 VM を取得できる」と言える。その VM を作るコードも、セキュリティ上の悪夢のようなバイナリの塊ではなく、誰でも読める普通の nix 式で、新しいマシンへの適用も単一コマンドで終わるデフォルトが何をするのか理解しているなら、世の中のあらゆるオプションをいじるほうが面倒なことが多い
「コンフォートフード」という表現が面白い。AIX から Linux に移ったあとも、いまだに motif window manager に steelblue4 のデスクトップ、wheat の xterm 背景を使っている
1989年に大学時代に初めて触れたデフォルトで、それ以降それより良くなったものはないと感じている。GNOME や KDE のようなものは吐き気がする
範囲が少し過剰に広がった、後付けの
if()ラッパーは古典的な例だノスタルジアは強力な薬だ
皮肉ではなく、motif で HiDPI が実際に動作するのか本気で気になっている
かなり昔、趣味で Windows を使っていたころ、特定の Windows レジストリキーの値を編集して
explorer.exeをcmd.exeに置き換えたすると Windows は
explorer.exeを実行して壁紙やアイコンのあるデスクトップを表示せず、UNIX のウィンドウマネージャのように、単色背景の上に各ウィンドウが Microsoft のcmd.exeシェルとして開く環境になった。古典的な Windows の黒い箱に青いタイトルバーと細い灰色の枠が付いた形で、コマンドプロンプトからC:\windows\system32のtaskmgr.exeのようなアプリを実行できた自分には
explorer.exeを使うよりはるかに速く堅牢に感じられ、明らかに軽量だった。後に Arthur Whitney の記事の写真で、Windows デスクトップ上に開いているウィンドウがcmd.exeひとつだけという場面を見た。何かを示唆したいわけではないが、ずっと記憶に残っている最近の Microsoft ドキュメントでもこれを見た: https://learn.microsoft.com/en-us/windows/configuration/shel...
IoT や組み込み向けの低価格/無料の Windows にも、
explorerなしで cmd 専用として動作するバージョンがあったと記憶しているこういうものは、自分が システム的バグ、または「型のバグ」と呼ぶ範疇に入る
ログインコンポーネントにトークンを渡し、そのトークンのデストラクタが自動的にプロセス完了を示すようにしていれば、このバグはほぼ書けなかったはずだ
代わりにランタイムで「コンポーネントたちがこれを覚えておく必要がある」という形にしたため、コード構造そのものがバグを許容している
数年前 Facebook にも似たバグがあり、通知数は通知があると表示するのに、クリックすると何もなかった。件数更新経路とリスト挿入経路が別々だったためにずれが生じ、両方を同じシステム部分が管理するように変えると、そのバグは永久に消えた
いつも悪いキャッシュのせいだと思っていた
少しメタな話だが、Raymond Chen の記事を知らせる「Why did happen with」式のタイトルを期待するようになった
いつも興味深い
子どものころから持っていた Windows 関連のコンピューティング迷信を唯一解いてくれたブログだ
そのコードは、私の好きな Kubernetes のバグをたくさん思い出させる
if (request.authenticationData) { ok := validate(etc); if (!ok) { return authenticationFailure; } }同じミームが数十年をまたいで続いているわけだ
ある権限を必要とするすべての関数がその権限を引数として受け取るようにすれば、たとえば
void doFoo(PermissionToDoFoo permission, ...){...}のように書き、呼び出しは認証データから権限を得る経路を通じてのみ可能にできるそうすれば、権限なしに Foo を実行するという不正な状態を表現すること自体が不可能になる
authenticationDataがなければデフォルトで認証済みとして扱われたということ?話題から少し外れますが、ログイン画面で自動的に更新される Windows Spotlight の壁紙が本当に好きでした。
そこで、それをデスクトップの壁紙に同期するスクリプトも使っていました。ところが私の Windows 10 では理由もなく止まってしまったので、代わりに Bing Image of the Day をダウンロードするスクリプトを書きました: https://blog.est.im/2025/stdout-03