同社はユーザーからの報告について調査し、問題を特定し、「Windows 10 Insider Preview Build 19013(20H1)」で修正した。
この問題は、「Windows」が使用しているグラフィックデバイスインターフェース(GDI+)における処理上のミスによって引き起こされていたという。
Windows Insider Programチームによると、「われわれは調査の結果、GDI+に関連するウィンドウが『G』と表示されるという問題を発見した。
この問題を修正したことで、今後は『GDI+ Windows (<exe name>)』という名前(<exe name>の部分はGDI+を使用しているアプリの実行ファイル名)が表示されるようになる」という。
また、Windowsの開発に20年以上にわたって携わっているRaymond Chen氏もさらに詳細な説明を提供した。
Chen氏によると、「G」がWindows上で表示されるのは、UnicodeのテキストをANSIで解釈してしまうという
バグによって、多くの場合にアプリ名の最初の1文字目だけが表示されることになるためだという。
Chen氏は「Unicodeで記述されたメッセージを『DefWindowProcA』に引き渡した場合、最初の文字以降にある多くの文字列が
切り捨てられることになる」と説明した。
GDI+ライブラリーの開発当初は、Unicodeに完全対応していなかった「Windows 98」をサポートするために、ANSIコンポーネント
としてコンパイルを行っていた。
その後Windows 98のサポート終了に伴い、GDI+チームはGDI+をANSIベースのコンポーネントではなく、Unicodeベースのコンポーネント
として再コンパイルしたのだという。
Chen氏は「通知ウィンドウのプロシージャー以外は、DefWindowProcAに対する明示的な呼び出しが行われていた。
このため文字セットにおける未対応文字の大半は、コンパイラーによって型の不整合が捕捉されていた。
しかし、DefWindowProcにおける文字セットへの依存については、パラメーター型で考慮されていなかった。
その結果、メッセージの受け取り方は暗黙の変換に任され、それによって引き起こされる不整合はコンパイラによって捕捉されなかった」と続けた。
「通知ウィンドウはテキスト処理をいっさい行わないため、この不整合はテスト段階でも検出されなかった。
『GDI+ Hook Window』というウィンドウのタイトルは単なる『G』になったものの、タイトル自体はどこにも使われていないため、
この間違いは他に悪影響を及ぼさなかった。
このウィンドウタイトルがユーザーの目に触れることはない。ただし、例外がある」(Chen氏)
「あるプログラムがサインアウトまたはシャットダウンを妨げた場合、Windowsはそのプログラムに属している目に見えるウィンドウ
を探し出し、『Blocked Shutdown Resolver』(BSDR)画面に表示しようとする。
しかし、そのプログラムが目に見えるウィンドウを保持していない場合、BSDRは可視/不可視に関係なく該当プログラムに属している
任意のウィンドウを選択する。
このため、『G』という名称の目に見えないウィンドウが選択される場合も出てくる」(Chen氏)