7月 31

これから WinRing0 の .NET (と言っても C# だけ)なサンプルコードを作成するつもりですが、

さえ、読めば余裕ですね。

DllImport は面倒な作業なので、ユーザはコピー&ペーストすればいいように全て用意しておく予定です。

7月 30

hambox さんからのレポートを元に仕様変更を行いました。

マニュアル 鋭意制作中(現在英語版のみです)

今回の主な修正点

  • ***Ex 系 API の仕様変更を行いました。(SetProcessAffinityMask から SetThreadAffinityMask に変更) 
  • Win64 環境において、64論理プロセッサに対応(動作は当然未確認)

◇Alpha9 API (@以下は序数)

  • GetDllStatus   @1
  • GetDllVersion   @2
  • GetDriverVersion @3
  • GetDriverType @4
  • IsCpuid     @11
  • IsMsr     @12
  • IsTsc     @13
  • Hlt      @20
  • Rdmsr     @21
  • Wrmsr     @22
  • Rdpmc     @23
  • Cpuid     @24
  • Rdtsc     @25
  • HltEx     @30
  • RdmsrEx     @31
  • WrmsrEx     @32
  • RdpmcEx     @33
  • CpuidEx     @34
  • RdtscEx     @35
  • ReadIoPortByte   @41
  • ReadIoPortWord   @42
  • ReadIoPortDword   @43
  • WriteIoPortByte   @44
  • WriteIoPortWord   @45
  • WriteIoPortDword  @46
  • ReadMemBlock   @51
  • WriteMemBlock   @52
  • SetPciMaxBusIndex   @60
  • ReadPciConfigByte  @61
  • ReadPciConfigWord  @62
  • ReadPciConfigDword  @63
  • WritePciConfigByte  @64
  • WritePciConfigWord  @65
  • WritePciConfigDword  @66
  • FindPciDeviceById  @67
  • FindPciDeviceByClass @68

ダウンロード:WinRing0 Alpha9

7月 29
  • プロジェクトアイコンの作成(サンプルアプリしかないから必要ないかも・・・)
  • プロジェクトバナーの作成 
  • ヘッダファイルの整理
  • C# 版サンプルコードの作成
  • 実用プログラム?として CrystalDMI 1.0.0 Beta の作成
  • マニュアルの整備(フレーム除去方法を検討中…)

今週末は結構開発が捗り一応の形が見えてきました。そうはいっても、キラーアプリがないとアピールしようがないというのが現実。う~~~む。

  • K8 関係のエディタでも書く?
  • PCI エディタでも書く?
  • MSR エディタでも書く?(CrystalCPUID に付いてるけど・・・)

キラーアプリについてはおいおい考えることにして、C# 本も買ってあることだし、そろそろ本腰入れてがんばってみますかね・・・ .NET も。

7月 29

Crystal Dew World の英語ページで WinRing0 の告知を始めました。SysInfo.dll を使いたいというリクエストは数回いただいているのでそのうちコメントもいただけるんじゃないかなぁ~と思っております。(希望的観測)

マニュアル 鋭意制作中(現在英語版のみです)
 今のところフレームを使用していますが、最終的にはフレームを使わない構成にしようと考えております。日本語への翻訳はもう少し仕様が固まってから行う予定です。

今回の主な修正点

  • SetPciMaxBusNo を SetPciMaxBusIndex に変更
  • FindPciDeviceById, FindPciDeviceByClass の不具合を修正

◇Alpha8 API (@以下は序数)

  • GetDllStatus   @1
  • GetDllVersion   @2
  • GetDriverVersion @3
  • GetDriverType @4
  • IsCpuid     @11
  • IsMsr     @12
  • IsTsc     @13
  • Hlt      @20
  • Rdmsr     @21
  • Wrmsr     @22
  • Rdpmc     @23
  • Cpuid     @24
  • Rdtsc     @25
  • HltEx     @30
  • RdmsrEx     @31
  • WrmsrEx     @32
  • RdpmcEx     @33
  • CpuidEx     @34
  • RdtscEx     @35
  • ReadIoPortByte   @41
  • ReadIoPortWord   @42
  • ReadIoPortDword   @43
  • WriteIoPortByte   @44
  • WriteIoPortWord   @45
  • WriteIoPortDword  @46
  • ReadMemBlock   @51
  • WriteMemBlock   @52
  • SetPciMaxBusIndex   @60
  • ReadPciConfigByte  @61
  • ReadPciConfigWord  @62
  • ReadPciConfigDword  @63
  • WritePciConfigByte  @64
  • WritePciConfigWord  @65
  • WritePciConfigDword  @66
  • FindPciDeviceById  @67
  • FindPciDeviceByClass @68

ダウンロード:WinRing0 Alpha8

7月 29

WinRing0 のマニュアル (現在英語版のみです)鋭意作成中!!

ようやく?一通りの項目が用意できました。まだまだ十分ではありませんが、これから内容の充実と具体的なライブラリの使い方などの説明を加え Beta 版移行の準備を進める予定です。

7月 28

プラットフォームが .NET Framework だと CPUID 命令や RDTSC 命令を実行するためには C/C++ などで DLL を作成する必要があり、初めてのプラットフォームが .NET な人にはもう何がなんだか・・・ということがあるかもしれないなと思うので、特権命令に拘らず必要そうな機能を実装していきたいと思います。

マニュアル 鋭意制作中(現在英語版のみです)

今回の主な修正点

  • IsTsc, Rdpmc, RdpmcEx, Rdtsc, RdtscEx, HaltEx を追加
  • RDMSR, WRMSR, CPUID を Rdmsr, Wrmsr, Cpuid に名称変更
  • 序数変更多数
  • サンプルアプリに PMC を読み出す機能???を追加

◇Alpha7 API (@以下は序数)

  • GetDllStatus   @1
  • GetDllVersion   @2
  • GetDriverVersion @3
  • GetDriverType @4
  • IsCpuid     @11
  • IsMsr     @12
  • IsTsc     @13
  • Hlt      @20
  • Rdmsr     @21
  • Wrmsr     @22
  • Rdpmc     @23
  • Cpuid     @24
  • Rdtsc     @25
  • HltEx     @30
  • RdmsrEx     @31
  • WrmsrEx     @32
  • RdpmcEx     @33
  • CpuidEx     @34
  • RdtscEx     @35
  • ReadIoPortByte   @41
  • ReadIoPortWord   @42
  • ReadIoPortDword   @43
  • WriteIoPortByte   @44
  • WriteIoPortWord   @45
  • WriteIoPortDword  @46
  • ReadMemBlock   @51
  • WriteMemBlock   @52
  • SetPciMaxBusNo   @60
  • ReadPciConfigByte  @61
  • ReadPciConfigWord  @62
  • ReadPciConfigDword  @63
  • WritePciConfigByte  @64
  • WritePciConfigWord  @65
  • WritePciConfigDword  @66
  • FindPciDeviceById  @67
  • FindPciDeviceByClass @68

ダウンロード:WinRing0 Alpha7

7月 28

RDMSR と全く同じように実装できるので RDPMC を実行する機能を Alpha 7 で追加します。

問題は、MSR や TSC のように CPUID の Feature Flags に PMC の存在を確認するフラグがないことです。ないんですよ。今日知ったんですけど。

PMC が存在するのは・・・

Intel : Pentium PRO および MMX Pentium 以降
AMD:Athlon 以降
VIA:どこから?
Transmeta:不明

といったところ。PMC は CPU によってかなり仕様が違ため、CPU を判定した後でないと使えません。

7月 28

RDMSR/WRMSR 命令は、存在しない MSR にアクセスすると一般保護違反が発生し、ブルースクリーンが発生してしまいます。その問題を回避するために、Windows 2000 以降では、Kernel Mode Structured Exception Handling を利用して一般保護違反が発生した場合の救済措置を行っております。(あっ、もちろんドライバ内部の話ですよ)

んが、RDMSR/WRMSR を呼び出す度に __try, __except を設定するのって実はオーバーヘッドが大きいのではないか??という気がしてきました。(未確認)実際バイナリファイルのサイズも増えてるから結構いろいろやってるんだろうし。(でも、やっぱり未確認)

どーしよ。高速版と安全版で分けようかなぁ~。私自身が CrystalCPUID で使う時を考えると MSR Walker/Editor 以外では SEH 必要ないんですよね。

SEHにどれくらい時間がかかるか実際に確認してみよう・・・。

7月 28

毎日毎日 OpenLibSys/WinRing0 の開発時間を無理やり確保している今日この頃。このモードに突入すれば正式版リリースは近いですよ(w CrystalDiskMark も予定通りリリースできましたしね。

WinRing0 はソフトの性格上正式版リリース後は、API 名や API の追加が(一応)難しくなります。技術的に難しいのではなく、利用ユーザがいちいち再コンパイルなり、再リンクが必要になってしまうためです。

なので、要望等ございましたら、私のテンションが上がっている「今」リクエスト頂けたらと思います。一度「完成」したつもりになると重い腰はなかなか上がりません(汗

現時点のスケジュール

◇WinRing0

8月XX日:マニュアル整備(英、日)が完了次第 Beta 版への格上げ
9月30日:正式版リリース予定

◇OpenLibSys

9月30日:Alpha版
12月31日:Beta版
2008年3月31日:正式版リリース予定

こんなに開発期間必要かなぁ~??とも思いますが、OpenLibSys は CrystalCPUID 5.1 or later と連携して開発しますし、ライブラリだけではなく、汎用システム情報収集ツールをセットで開発する予定です。

そのため、CrystalMark 2008? そのものは、システム情報収集機能を持たず、OpenLibSys.exe/dll/sys を同梱する予定です。あくまで予定ですけど。さらに言うと、CrystalMark 2008 出るかホント謎ですけど。

WinRing0/OpenLibSys は .NET Framework からも利用できるので、CrystalCPUID 6.0 は WPF アプリになるかもしれませんよぉ~ちなみに、5.x は CDhtmlDialog ベースです。

まぁ、今年度は Project OpenLibSys に完全注力するということで。

7月 27

今回は、hambox 氏から頂いたアイディアをサクッと実装してみました。RDMSR, WRMSR, CPUID を実行する Process Affinity Mask が設定できるので、ちょっとした検証には便利かと思います。が、マルチスレッド環境ではよく考えて使ってください。あと、効率も落ちるので大量に実行するときは要注意です。

今回の主な修正点

  • RdmsrEx, WrmsrEx, CpuidEx を追加
    Process Affinity Mask が指定できます。
  • RDMSR, WRMSR, CPUID 仕様および序数変更
  • HLT 序数変更
  • サンプルアプリのバグを修正(CPUID の調査範囲が間違ってました。)

序数は変更してしまう場合があるので、API は名前で探してくださいね。また、OpenLibSys 固有の API は 100 以降を使用するつもりです。

あと、ヘッダファイル周りの問題は次回以降に修正します。というか、Beta 移行時辺りになるかも・・・。

◇Alpha6 API (@以下は序数)

  • GetDllStatus   @1
  • GetDllVersion   @2
  • GetDriverVersion @3
  • GetDriverType @4
  • IsCpuid     @11
  • IsMsr     @12
  • RDMSR     @21
  • RdmsrEx     @22
  • WRMSR     @23
  • WrmsrEx     @24
  • CPUID     @25
  • CpuidEx     @26
  • HLT      @27
  • ReadIoPortByte   @31
  • ReadIoPortWord   @32
  • ReadIoPortDword   @33
  • WriteIoPortByte   @34
  • WriteIoPortWord   @35
  • WriteIoPortDword  @36
  • ReadMemBlock   @41
  • WriteMemBlock   @42
  • SetPciMaxBusNo   @50
  • ReadPciConfigByte  @51
  • ReadPciConfigWord  @52
  • ReadPciConfigDword  @53
  • WritePciConfigByte  @54
  • WritePciConfigWord  @55
  • WritePciConfigDword  @56
  • FindPciDeviceById  @57
  • FindPciDeviceByClass @58

ダウンロード:WinRing0 Alpha6