User-mode memusage

上のカーネルデバッガで表示したようなページリストのサイズですが,「それらしいパフォーマンス値」というのは,なんとも……こう……モニタリング欲をそそられます.しかし,これらの数字にアクセスできる API やパフォーマンスカウンタは,結構探してみたのですが残念ながらなかなか見つかりません.
仕方がないので,カーネルデバッガと同じ手を考えましょう.実際の物理ページの状態が PFN (Page Frame Number) database に記録されていることや,PFN database がどのような構造をしているかは,『インサイド Microsoft Windows 第4版 上』に書かれています.後は凶器と役者を動かすだけです.
さしあたっての問題は,ユーザー空間からは手出しできないカーネル空間にどう手を出すかということです.順当な線ではドライバを自作するというものでしょう.というわけで今回初めてのドライバ制作に手を出してみたのですが,何度かの試行錯誤の上*1,確かにそれらしい結果は得られました.ただ,出来上がるまでにクラッシュした回数*2を考えると,微妙に配布が躊躇われる代物です.
とはいえこのままお蔵入りにするのももったいないので,完全ユーザモードの代用品を用意してみました.ただし,中身は非公開 API でカーネルメモリを読みに行くという,立派にあちら側の世界の代物ですので,必ず,OS ごとクラッシュしても問題のない環境で実行するようにしてください.
http://www.dwahan.net/nyaruru/hatena/memusage.zip
また,使用可能 OS はかなり限定されています.さらにデバッグ特権を取得する必要があるので,恐らく管理者として実行する必要があるでしょう.
対象 OS は以下の通りです.

なにせセキュリティホール絡みで封印され,Windows Server 2003 SP1 及び Windows XP 64-bit Edition では使えなくなった非公開 API *3 による一発芸です.
ご利用はくれぐれも計画的に.

*1:この辺を参考にしつつ.http://www.i.u-tokyo.ac.jp/edu/training/ss/msprojects/kernel.html

*2:2回目以降のクラッシュでは Virtual PC に身代わりになってもらうことを憶えましたけど

*3:http://recon.cx/en/s/aionescu.html