少し前にWinXP SP2のネタを書いたが、ドライバ屋にとってSP2になって変わったところの一つが判明。
「OSによるメモリプールの監視強化」がそれで、確保したメモリプールをオーバーランして使用していた場合に、その領域をExFreePool()すると、この時点でWindowsがプールのチェックを行ってメモリプールが不正に使用されたということで、BAD_POOL_HEADER例外を発生させブルースクリーンとなる。
ネットで「XP SP2 BAD_POOL_HEADER」で検索してみると、今までの市販製品のドライバがSP2をインストール後にこのエラーを吐いて動かなくなったという事例がけっこう出ている。つまり、それだけメモリ管理にバグが残っているドライバが市販品にくっついて出回っているということ。
SP1までだと仮にメモリをオーバーランしてもそれがノンページドメモリの場合はおそらくメモリリークとなるだけでエラーにはならないと思う(もちろんバグなんだけど)。ページドメモリの場合はPageFault例外になるから気づくかな…。
これは実際にバグの箇所が特定しにくい上に(あくまでExFreePool()時に例外が発生するので、スタックトレースがその場所ズバリを指さない場合がある)、コードの作りによっては再現性もまちまちだろうから追っかけるのはちょっと面倒。DriverVerifierでSpecialPoolとPoolTrackingのチェックをさせながら実際にドライバを動作させてBugCheckが発生しないかテストしていくのが地道だけど王道かと。
ちなみに、このネタ元はOsrOnlineの記事。
関連する記事:
- feedparserで文字コード判定がうまくいかない 初pythonプログラミングということで、feedparserを使ってTracのRSSを取得するようにしたいのだけど、Tracの吐くRSSの文字コード(エンコーディング)解析に失敗するときがある。 基本的にはUTF-8で出力しているのだけど、svnのチェンジセットやチケットの概要で日本語の長いコメントが入っていたりすると、RSSを出力するときに変な場所で文字を切ってしまうっぽい。 そうすると、UT......
- AndroidのNative層でのログ出力 まだ調査中だけどとりあえず動いているのでメモ。 (1)LOG出力の際のタグの定義と、Log.hのインクルード warningが出るのでLOG_TAGはundefしておいたほうが良いはず。 #define LOG_TAG "JNI-Test" #include <utils/Log.h> ちなみにLog.hの場所は以下。 frameworks/base/include......
- Windows Vista インストール Longhornこと、Windows Vista beta1をインストールしてみました。 入れたマシンはAthlon64だけど、32bit版のほうをインストール。 まずはAvalonを採用したデスクトップ。 標準テーマ?のAeroだとこんな感じ。 ウインドウのタイトル部分が半透明で透けている、とかダイアログの表示・非表示時の視覚効果が新しくなっているというくらいしか分からないですね。 右下のウイン......
コメント:0
トラックバック:0
- この記事のトラックバック URL
- http://www.swingingblue.net/mt/archives/000159.html/trackback
- トラックバックの送信元リスト
- デバイスドライバ屋にとってのXP SP2 - きままな日記帳 より
