一部の「Windows 10」ユーザーの間では1年以上前から、「G」という名称の謎のアプリによってシャットダウンが妨げられるという問題に対する懸念の声が上がっていた。Microsoftが今回、この問題について説明した。
同社はユーザーからの報告について調査し、問題を特定し、「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氏)
この記事は海外CBS Interactive発の記事を朝日インタラクティブが日本向けに編集したものです。
CNET Japanの記事を毎朝メールでまとめ読み(無料)
ものづくりの革新と社会課題の解決
ニコンが描く「人と機械が共創する社会」
ZDNET×マイクロソフトが贈る特別企画
今、必要な戦略的セキュリティとガバナンス