科学・技術
ディスプレイコントロールパネルのポインタ切り捨てバグはなぜ長期間未修正のままだったのか?
要約
ある古いバグが長期間未修正だった理由を調査した結果、原因はユーザーが非常に古いバージョンのビデオドライバーを使用していたことでした。これは、PCメーカーが特定のハードウェア構成に対してドライバーを認定し、そのサポート期間が終了すると、メーカーはそれ以降のドライバーの認定を放棄するため、ユーザーは古いドライバーに固定されてしまうという構造的な問題に起因していました。
全文翻訳
前回は、バグのあるコントロールパネル拡張機能が、目の前にある値を切り捨てたという推測について述べました。ベンダーに分析結果を送ったところ、「クラッシュのドライバーバージョン番号を確認してもらえますか?」という返信がありました。クラッシュしたすべてのシステムでドライバーバージョン番号を確認したところ、それらは「ビルド314」のようなもので、現在のドライバービルド番号は「ビルド2718」のようなものでした。これらのユーザーは、信じられないほど古いドライバーを実行しています!ベンダーはこのバグをずっと前に修正しましたが、ユーザーはその修正を受け取っていませんでした。何が起こっているのでしょうか?私の理論は、これらのユーザーがWindows Updateをオフにしているか、あるいはビデオドライバーのアップグレードを拒否しているというものでした。しかし、私の理論はおそらく間違っていたことを学びました。ここで重要なのは、これらはビデオドライバーであり、コンピューターメーカーが多くの制御を行っているドライバーのカテゴリであるということです。メーカーは、独自の受け入れテストを特定のハードウェア構成で実施した後、PC用のドライバーを認定します。(これはおそらく、ビデオカードベンダー自身が認識していないハードウェア構成でしょう。)この責任は販売後も継続します。コンピューターメーカーはドライバー更新の認定について責任を負い、おそらくラボで維持しているリファレンスPCでテストすることによって行われます。時には、メーカーはカスタマイズされたバージョンのビデオカード(私の可愛い子よ、あなたの製品を差別化するためにはこれ以上ないもの)を入手するため、ビデオカードベンダーの「ドライバーダウンロード」サイトでは、インストールする前にコンピューターメーカーに確認するように警告することがよくあります。実際には、コンピューターメーカーは1年、1年半、長くても2年間はドライバーの認定に熱心です。¹それ以降は、そのモデルのサポートを中止し、それ以上のドライバーの認定を行わないというモデルを放棄することが珍しくありません。そのモデルのPCを持つすべての顧客は、メーカーがドライバーの認定を停止した時点の最新のビデオドライバーで立ち往生しています。Microsoftは多くのハードウェアクラスの汎用ドライバーを維持していますが、意図的に優先度を低く設定しているため、PCメーカー提供のドライバーが優先されます。ビデオカードベンダーから直接受け取ったビデオドライバーも同様に、ビデオカードベンダーによって優先度が低く設定されています。コンピューターメーカー認定のドライバーが優先されますが、その認定がひどく古い場合でもです。
¹メーカーがドライバーを認定する期間の長さが、コンピューターの保証期間の長さに何らかの相関があるとしても、私は驚かないでしょう。ここで説明されているバグはセキュリティ上の脆弱性ではないため、たとえ新しいCRAの世界であっても、修正される可能性は非常に低いでしょう。適切なセキュリティサポートプラクティスについて会話を始めるためには、*まさか*、維持エンジニアリングを行うことはおろか、私のような非常に騒がしいシニアエンジニアが必要になります。Nightmare Eclipseのような人々は「ビールをホールドして…」と言うでしょう。
特にビデオドライバーでは、使用しているすべてのプログラムで動作する特定のバージョンに固執する必要があることがよくあります。グラフィックドライバーの自動更新は、そのようなことの一つです…あなたはそれをしません。約10年前、AMDがディスプレイが数秒ごとに1秒間定期的にフリーズする原因となるディスプレイドライバーを導入したことを覚えています。特にそれが「サポート」されている最後のドライバーだった場合、それを引き当ててしまったら運が悪いです。私たちはその理由で、汎用VGAドライバーを使用しているラップトップを持っていました。Windows Updateをブラックホールしないと、AMDドライバーが戻ってきます。また、人々が映画を見たりゲームをしたりしているときに、PCがランダムな時間に再起動するのを避けるために、Windows Updateを無効にしている可能性も十分にあります。現在のWindowsバージョンではもうそうしないと思いますが、Windows XPからWindows 7では、有効にしていると、質問なしで更新を実行して再起動していました。質問なしというのは技術的には正しくありませんが、フルスクリーンのことをしている人にとっては実質的に正しいです。しまった、オンラインマルチプレイヤーゲームではなかったことを願っています。
Read less
これはおそらくWindows Vista(約2008年頃)の時代に起こっていたのでしょう。Sony VAIOのATIドライバーに苦しんだことを覚えています。ATIはモバイルGPUで汎用ディスプレイドライバーの使用を許可したがらなかったのです。infファイルをハックしてインストールする必要がありました。OEMディスプレイドライバーは当時絶対にひどかったです。私は(間違っていたら訂正してもらいたいですが)この話はかなり古いと推測しています。長らく、2つの主要なGPUベンダーはユニバーサルWindowsディスプレイドライバーを提供しています。ボードメーカーのカスタマイズ(GPUとメモリクロック速度など)は、オプションROMに保存されたデータを使用して処理されます。ラップトップGPUの分野については100%確信はありませんが、そこでも状況は同じだと思います。はい、2026年にGWL_WNDPROCをGWLP_WNDPROCに、LONGをLONG_PTRに変更し忘れたプログラマーのために困っている人は誰もいないと確信しています!!!
この話は2020年のものです。戻って確認したところ、ヒット率は現在非常に低いです。問題にヒットしていた(2020年でさえすでにかなり古いマシンだった)マシンのほとんどは、その後廃止されたため、もはや人口の一部ではないと推測しています。
2026年3月31日
更新が問題を引き起こしたかどうかを確認する前に、更新前に問題がなかったか確認してください
Raymond Chen 2025年9月16日
STATUS_STACK_BUFFER_OVERRUN ステータスコードを顧客向けテキストに翻訳する
Raymond Chen