ドライバ内でのバージョン判別

VistaだとDbgPrintが出ない問題
連射ドライバではIoIsWdmVersionAvailable(1, 0x20)でXP以降であればDbgPrintExを使用するようにしてた。
別に判別しなくても、単にMmGetSystemRoutineAddressの結果がNULLだったらDbgPrintするようにすればいいだけなんだけど、判別がしてみたかった…んだと思うたぶん。(自分で書いてて忘れた)


ドライバが Windows 2000 に読み込まれない場合、VER_SET_CONDITION が原因かもしれません」を読むと

  • Windows2000ではRtlVerifyVersionInfoが存在しない
  • Windows XP以降はPsGetVersionが削除されている

ので、RtlVerifyVersionInfoをMmGetSystemRoutineAddressしてみてNULLだったらWindows2000以前とかひどいことが書いてある(Ps〜がobsoleteってことなんだろうけど…)。そんなわけで、あるバージョン以上かどうかを一発で調べるにはIoIsWdmVersionAvailable()の方が手っ取り早そう。