リセット

No Comments

思い切って色々整理しました。

WinRing0 2.0.0

3 Comments

【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 の経験を踏まえ同じ失敗をしないよう慎重に設計したいと思います。

WinRing0 公開終了

8 Comments

コードサイニング証明書を個人でも取得できるようになったこと などから WinRing0 の開発・公開を終了いたします。

WinRing0 が提供していたような機能を必要とされれる方は、ご自分でコードサイニング証明書の取得と(適切な)カーネルモードドライバの開発を行ってください。

【2010/5/14 20:25 追記】

セキュリティ上のリスクを低減した WinRing0 2.0.0 が利用できます。

【2010/3/17 12:07 追記】 (コメントからの転記)

なぜ WinRing0 を公開停止にせざるを得なかったかを多く語ることはしませんでした。そのため、ユーザーの方にはなぜ?という疑念を抱かせてしまったのは当然だと思います。この点についてはお詫びいたします。ただ、そうせざるを得ない事情が背後にあったことを察していただければと思います。

開発者の方であればご理解いただけるかとは思うのですが、端的に言うと本質的に WinRing0 は存在してはならないライブラリなのです。なぜ、OS は I/O ポートや物理メモリ、MSR などへのアクセスを制限しているか、Vista x64 以降カーネルモードドライバへの署名が必須なのかを考えていただければご理解いただけるかと思います。

私自身は、より多くの開発者と低レイヤープログラミングの楽しさを共有したいと思い、諸々を理解した上で WinRing0 を開発・公開しましたが、今の時代にそれは許されないということを受け入れざるを得ません(※)でした。

※WinRing0 にしているデジタル署名が取り消されてしまうと x64 環境では、WinRing0 ベースのアプリは全て起動できなくなってしまいます。

公開停止に至った背景を詳述しなかったために多くの疑念や誤解を生じさせてしまったこと、また、WinRing0 をご利用いただいた開発者の皆様を結果的に振り回すことになってしまったことをお詫びいたします。

OpenLibSys.org 10万ヒット

No Comments

おかげさまで、OpenLibSys.org は 10 万ヒットを達成しました。

そろそろ WinRing0 の上位版である OpenLibSys の開発も再開したいところです。って、去年も言っていたような気がするけど。

WinRing0 1.3.1b

No Comments

WinRing0 最新版のダウンロードは、OpenLibSys.org からどうぞ~

【変更点】

先日、ドイツの開発者から C# のサンプルが動作しないという連絡がありました。う~ん、なんでだろと思っていたら翌日解決策がその方から届きました。

p.IsInRole(@”BUILTIN\Administrators”);


p.IsInRole(WindowsBuiltInRole.Administrator);

に変更すれば良いとのこと。どうやら、ドイツ語版の Windows では、管理者権限のグループが Administrators ではなく別の単語(ドイツ語)のようです。というわけで、海外でも使われるソフトの開発を目指す方はサクッと修正を・・・すんません。なお、C++ のサンプルコードは、マニフェストで管理者権限を要求するようにしているので問題なしです。

【ひとりごと】

久しぶりに SourceForge.net にログインしたところいくつか気が付いたのでメモメモと

  • ファイルのアップデートが Web 上から行えるようになってます。(今までは一度匿名  FTP サイトにアップロードしてから管理画面で選択する必要がありました。)
  • デザインがとってもすっきりしています。
  • IE8 だと一部管理画面が乱れるような・・・。

SourceForge.JP の方が日本人には断然便利かと思いますが、一つぐらい SourceForge.net にホストしてもらうのも良いのかも???とはいえ、注目度は全然あがりませんけどw

あと、ユーザーからの評価でこんなコメントがありました。

The driver uses Microsoft deprecated kernel APIs such as HalGetBusDataByOffset/HalSetBusDataByOffset. There might be a chance the driver will not work if APIs are no longer exposed.

うっ。痛いところをw ホント次のカーネルで NT4 まで使えた Kernel Mode APIs が廃止されると・・・ヤヴァイです。WinRing0 の PCI 関連 API が動作しなくなります。互換戦略の弊害が顕在化する日も近い!? MS さんにはぜひぜひ惰性で HalGetBusDataByOffset/HalSetBusDataByOffset のサポートを続けていただきたいところです。

VirtualChecker WPF (サンプルコード)

No Comments

*2009/12/26 10:12 追記:ダウンロードファイルを差し替えました。

Tech Fielders セミナー 札幌 道場スタイル[Windows Server 2008 R2 仮想環境構築編] で LT を行いました。

その際に使用しました VirtualChecker WPF (サンプルコード) を公開します。WPF で作ったものの WPF らしい機能は何も使っていません。

ご興味のある方はソースも簡単なので眺めてみてください。と、言いつつ VisualStudio 2010 Beta2 用ソリューションしかついていません。ごめんなさい。

VirtualCheckerWpf01

ダウンロード

WinRing0 1.3.1

No Comments

※ダウンロードは、OpenLibSys.org  からお願いします。

【主な修正点】

  • Visual Studio 2008/2010 への対応強化
    2005/2008/2010 用のソリューションファイルを別々に用意しました。
  • CPUID 命令発行時の ECX レジスタを常に 0 となるよう修正
  • OlsApi.h の不備を修正 (HltPx)
  • 256×256 アイコンの適用

【ひとりごと】

  • サンプルコードも微妙に更新しています。

WinRing0::Cpuid()

4 Comments

index として EAX しか設定できないという問題があります。

Visual C++ が提供している __cpuid() 自体の問題ではあるのですが・・・。CPUID 命令実行時の ECX レジスタの値は本質的に不定となります。

32bit だけならインラインアセンブラを使って

__asm {mov ecx, XXX}
__cpuid()

で ECX レジスタの値を設定可能ですが、x64 ではインラインアセンブラが使えないためこのような簡単な方法は存在しません。CrystalCPUID4 が使用している SysInfo.dll では、師匠であるぬじぬじ氏に制作していただいた CPUID 命令発行用アセンブラから生成したオブジェクトコードをリンクしています。

ECX 入力に対応するとなると API 変更が必要になるのでまたしてもマイナーバージョンが変更となります。

ホント、新機能の(ほとんど無い)ライブラリのバージョンアップって迷惑ですよねぇ~開発者からみると。でもやるっきゃない。WinRing0 のユーザーはまだそんなに多くないのでやるなら早い方が良いですね。

最初っからわかってはいたことなのですが・・・。忘れてたけどw

OpenLibSys.org 更新

No Comments

OpenLibSys.org をほんのり更新しました。

  • WinRing0 に関する記事のリンクをトップページに追加
  • オープンソースでの開発を推奨するメッセージをさりげなく?追加
  • マイクロソフトさんからのインタビュー記事へのリンクを追加

などなど、オープンソース開発者(仲間)を増やすべくがんばります。

OpenLibSys.org はこれからが本番ですよ。(新ネタはないけどw)

Moo0 SystemMonitor

No Comments

systemmonitor

 Moo0 さんから WinRing0 を使用した  Moo0 システムモニター がリリースされています。サイドバーの代わりに常駐させておくのにピッタリなサイズですし、見た目も綺麗でカスタマイズ可能です。

CPU 使用率やプロセス数など様々な情報が表示できますが、一般的な情報だけでなく CPU 温度の取得にも対応しています。

Older Entries