WinRing0 2.0.0
【2010/7/1 追記】
ごめんなさい。
—— ここまで —–
先日の WinRing0 1.3.1b 公開終了 より約 2 ヵ月が経ってしまいましたが、ようやくセキュリティ上のリスクを低減した WinRing0 2.0.0 の準備ができました。ダウンロードは OpenLibSys.org からお願いします。
【変更点】
- API を再編 (ほとんど廃止)
⇒ 残っているのは実質 Cpuid, Rdtsc, Rdmsr だけです。 - CPUID 命令発行時に ECX レジスタ値を設定できるように変更
【皆様へ】
WinRing0 公開終了 は、署名取り消しという最悪の事態を回避するためにも代替案を用意することなく実施することになってしまいました。また十分な説明がなされなかったことにつきましても改めてお詫びいたします。
何らかの形で復活させるべく検討を行った結果、Rdmsr ができるだけのライブラリでも十分な存在意義があるとの結論に達したため、大幅に API の再編成を行い WinRing0 2.0 としてリリースすることにいたしました。
残念ながら、Rdmsr 以外の Ring0 API を利用しているソフトウェアは 2.0 へアップデートすることはできません。使用している機能によっては、専用ライブラリの開発という形で協力できる可能性もありますのでご相談ください。
【WinRing0 1.x の問題点】
WinRing0 1.x は Windows が保護しているリソースを無制限に解放するライブラリですが、本来デバイスドライバは、所望の機能を実現するために必要なリソースにのみアクセスし、機能のみをアプリケーションに公開する必要があります。
つまりライブラリとして、任意の MSR を書き換える、任意の I/O ポートにアクセスするなど汎用的な機能を提供するのではなく、SetAmdK8FVID (FID/VID を変更する)、GetAmdK8Temperature (K8 の温度取得)、Beep (ビープ音を鳴らす) などハードウェアにアクセスすることによって実現可能な機能として公開しなければなりません。
したがって、WinRing0 1.x のような汎用ハードウェアアクセスライブラリは試作には大変有用ですが、本来であれば開発者は一般公開用に専用のデバイスドライバを開発する必要があるわけです。Vista x64 版以降カーネルモードドライバへのデジタル署名が必須となったため決して簡単なことではありませんが、日本では個人でも コードサイニング証明書が取得できる ため不可能ではありません。※海外では法人格が必要です。
【想い】
より多くの人と低レイヤーアプリ開発の楽しさを共有したいと考え WinRing0 1.x を企画・開発しました。個人的に得ることは多々ありましたし、WinRing0 1.x が存在しなければ生まれなかったソフトも多数あると思いますが、結果的には大失敗であったと感じています。
次期ハードウェアアクセスライブラリの OpenLibSys は、WinRing0 の経験を踏まえ同じ失敗をしないよう慎重に設計したいと思います。
ご無沙汰しています。susumu です。
2.0 公開ということで、安心しております。
いろいろと、非常に難しいところですね。
とにかく再公開ということで、うれしいかぎりです。
今後ともよろしくお願いいたします。
P.S.
自作のHardwareTemp、2.0利用のものへ変更予定とします。
大変お手数をおかけしますが、WinRing0 2.0 への移行は各種ファイルを上書きコピーしてリビルドするだけなのでぜひサクッとお願いします。
※Cpuid() は引数が変わっちゃいましたが・・・
色々と非常に難しいことを察していただければ幸いです。HardwareTemp のようなソフトウェアを開発いただいたこと自体が WinRing0 を開発した価値そのものなので有り難く思います。