12 月 24

 世間はクリスマスということで、CrystalCPUID 5 の開発超初期版をソースコード付きでリリースします。基本的な機能はほとんど何も実装されていないので、ご了承ください。

特にメインダイアログは『飾り』です。

 また、Unicode ビルド (x86) なので NT 系でお試しください。もう少し開発が進んだら MBCS ビルドも出します。また、x64 ドライバは付属していません。

 ダウンロードの価値は全くないので、一般の方は正式リリースをお待ちください。

  • CrystalCPUID 5 -Estel- DevCX 期間限定版 (公開終了しました 2007/12/26)
12 月 24

【本日の進捗】 

  • OpenLibSys のロード関連 
  • UAC への対応および NT4/2000/XP においても必要に応じて管理者権限を要求する機能を搭載
  • IE4 以降がインストールされていない NT4 でアクセス違反が発生する不具合を修正
  • GetDriverStatus API を作成
  • デバイスドライバをシステムにインストール&アンインストールする OpenLibSys Driver Manager を更新 

【メモ】 

【イイワケ】

  • 今日は、管理者権限の処理周りに時間がかかってしまったため、System Information by DMI まで進みませんでした。
12 月 24

NT4 SP1 でも動作するように意地になって色々調査したところ、IE のバージョンチェック方法に問題があったことが判明(^_^;

CDHtmlDialog は IE に依存しているため、動作には最低でも IE4 が必要となります。そこで、私は、

if(GetFileVersion(_T(”Shdocvw.dll”)) < 400){エラー処理;}

という感じで IE 対策をしていたつもりだったのですが…

インストールされている Internet Explorer のバージョンを確認する方法 (MSDN)

によると IE4 における Shdocvw.dll のバージョンは 4.71 とのこと。前もこのページを見ながら IE4 が入っていない NT4 対策をしたような気がするのですが。う~む。

※じゃぁ、CDHtmlDialog 使うのやめたら?というツッコミはご勘弁を。

Visual C++ 2005 を使用しているうちは、NT4 での動作にもこだわりますよぉ~。無駄な努力だけど、なんとなく熱いような気がするので。

12 月 24

管理者権限を持っているかどうかを実行時に判別して、ドライバがインストールされていない場合は、管理者権限を要求するという処理を入れようと思ったのですが、これがなかなか難しい C# 版は簡単にできたのですが…

使えそうなのは、

  • IsUserAnAdmin (XP 以降/ 2000 では序数でのみ呼び出せるらしい)
  • IsUserAdmin (CheckTokenMembership のサンプルコード)

しかし、NT4 では動かないことがわかりました orz えっ?NT4 はどうでも良いだろうって?いやいや、NT4 は仮想 PC 上の妖精さんとして永遠に生き続けるはずです。

と思ったら、

なら NT4 でもいけるみたい。よくよく考えると、CrystalCPUID 5 -Estel- は多言語化対応のため Unicode 版と MBCS 版を別々に用意することになるので、GetProcAddress じゃなくて #ifdef で済みますね。

こういう部分は、一度完成したと自分が思ってしまうと見直すことがないので、やる気があるうちにしっかり実装してしまいたいところ。

12 月 24

デバイスドライバをシステムにインストールする機能を復活?させました。システムにドライバをインストールしてしまえば、管理者権限がなくても CrystalCPUID が動作できるようになります。

WinRing0 にはドライバをシステムにインストールする機能がない(あまりにアレなので敢えて取り除いています)ため、ドライバがシステムにインストールされているか、普通にロードされているかを識別する API がありません。この API がないと管理者権限でアプリを起動するべきかどうかを判断できないので、GetDriverStatus API を追加しようと思います。

ようやく CrystalCPUID 5 -Estel- と OpenLibSys -PureCrystal- を開発しているという気分になってきました。長年愛用した Visual C++ 6.0 ともようやくお別れ出来そうです。

12 月 24

◇公式サイト

1.0.11 からの変更点

  • マニュアルに Visual C++ 2008 対応に関する記述を追加
  • OlsApiInitDef.h および OlsApiInitExt.h を追加 
    RUN_TIME_DYNAMIC_LINKING 使用時に複数のファイルから WinRing0 API を呼び出すことができない問題に対応
  • Visual C++ 2008 Express Edition 対策
    OlsDll.rc 内の “afxres.h”  を <windows.h> に変更するよう指示するコメントを追加

◇WinRing0SampleCpp.exe (1.0.7.8)

  • OlsApiInitDef.h および OlsApiInitExt.h の使用方法を提示するための変更

■メモ

DLL ファイルおよびドライバファイルは 1.0.11 と同一です。

12 月 24

今日もいそいそプログラミング… と。

OpenLibSys と CrystalCPUID の連携コードを書いている際に気が付いたことがあります。 

WinRing0 には、RUN_TIME_DYNAMIC_LINKING と LOAD_TIME_DYNAMIC_LINKING それぞれに対応するライブラリ初期化ルーチンが付属しているのですが、RUN_TIME_DYNAMIC_LINKING 用の OlsApiInit.h を使用してライブラリの初期化を行っても、他のファイルから API を呼び出せないという問題があることに気がつきました。サンプルプログラムは、ひとつのダイアログで完結していたので気が付かなかった…。考えてみると当たり前なのですが。

OlsApiIni.h はグローバル空間に WinRing0 API を展開し初期化するため、他のファイルから API を呼び出すためには、extern “API 名” してあげないと参照できません。

例:GetDllStatus() の場合

typedef DWORD (WINAPI *_GetDllStatus) ();
extern _GetDllStatus GetDllStatus;

もちろん、OlsApiInitExtern.h を作って、extern しまくれば解決するわけですが…。英語で状況を説明してマニュアルを書くのは大変です。というわけで、仕様というか初期化ルーチンはオマケですから。

リンク方式の使い分け (MSDN) というわけで、複数のファイルから WinRing0 API を使用する場合は、暗黙的リンク (LOAD_TIME_DYNAMIC_LINKING) を推奨の方向で…。

【2007/12/24 11:12 追記】

OlsApiInitExt.h と OlsApiInitDef.h を作成し、RUN_TIME_DYNAMIC_LINKING においても、複数のファイルから WinRing0/OpenLibSys API を使用できるようにしました。サンプルプログラムも更新しなければならないので、何かのついでに更新したいと思います。

12 月 24

Visual Studio 2008 対応に関する記述を追加しました。が、ライブラリ本体を更新するほどの変更ではないため、Web 上のマニュアルのみ更新しました。他の問題でライブラリを更新する際に添付マニュアルを更新しようと思います。

言いたいことはひとつだけ。WinRing0 は Visual Studio 2008 でも使えますと。

12 月 24

1.0.5c からの変更点

  • F5 キーを押すとダイアログに使用している HTML ファイルがそのまま表示されてしまう不具合を修正
  • 選択中のテストサイズをテキストコピーに含めるように変更
  • Ctrl + S キーでテキストコピーする機能を追加

ダウンロード

12 月 23

【本日の進捗】

  • BIOS Information by WMI ダイアログを作成
  • CPUID Information ダイアログを作成
  • 各種拡張機能をモードレスダイアログ化
  • CDHtmlDialogEx クラスを改良 (モードレスダイアログに対応)
  • テーマ機能を実装(CrystalDiskMark 相当)
  • 多言語対応機能を実装(CrystalDiskMark 相当)
  • CrystalCpuidDlg.cpp を分割(テーマ機能と多言語対応機能を別ファイルへ)

【ひとりごと】

  • CrystalCPUID 4.x よりは遥かに保守がしやすそう。
  • 仮想関数の意味がようやく理解できたような気がする。
  • 開発ブログっぽくなってきた。ような気がする。

【明日の目標】

  • OpenLibSys との連携機能
  • System Information by DMI  

あたりの対応をがんばりたいと思います。OpenLibSys の Extension API 仕様はまだ全然考えていないのですが、とりあえずリンクして、一緒に動作するようにするところまでは進めたいと思います。そこまでできれば必要に応じて API を定義していくだけですからね。