CrystalDiskInfo 4 Dev5
【主な変更点】
- フォント選択ダイアログ “テーマ > [Alpha] Font” を用意しました。。。が、、、
- Classic テーマで描画が乱れる不具合を修正 (スタイルシート直し忘れてました)
【ダウンロード】
マニュアルはもう少ししてから整備します。
【ひとりごと】
フォントによっては、リストコントロールの表示が変わらないため違和感があります。最終的にはもっと目立たないところにフォント選択機能を配置するかも… あと、フォント関連の対応に工数を割く必要が果たしてあったのかは深く考えないことにします。今のところ反響もないしねorz 誰にも頼まれていないことを無駄に頑張ってしまったような気がしてなりませんw
困りはしないんですけどAAM/APM設定画面の右クリックメニューで「左の端」「右の端」だけが機能しません
こんにちは。いつも使わせてもらってます。
Dev5と関係ありませんが、以前x64で不具合が出るとの記事があったので思い当たる情報を(元記事が見つかりませんでした。内容について、知っていたらごめんなさい)。
IOCTLで引き渡すいくつかの構造体は、32/64ビットによって若干レイアウトが異なります。WDKで定義されている構造体(例えばATA_PASS_THROUGH_EX)は、64ビットでコンパイルした時に WIN64 で切り分けられた構造体が複数定義されます。
これは32ビットサンク実装のための定義で、例えば上記ATA_PASS_THROUGH_EXの場合、ATA_PASS_THROUGH_EX32という構造体が同時に定義されます。
64ビットでコンパイルすると、ATA_PASS_THROUGH_EXのメンバは64ビット環境を前提としているため、現在の32ビット版でのバイナリレイアウトとは異なります。バイナリレイアウトが同じになるのは、ATA_PASS_THROUGH_EX32の方です。
で、ここからが玉虫色な部分ですが、64ビットネイティブなIOCTLと32ビットサンク実装によるIOCTLの判定は、完全にドライバ任せです。つまり、これらの判定を行い、正しい構造体のバイナリレイアウトを使用するかどうかは、個々のドライバ(この場合は、ディスクデバイスインターフェイス)次第ということになります。(WDKのドキュメントを参照できるのであれば、IoIs32bitProcess()というAPIを使います)
WindowsはIOCTLを発行したプロセスが、64ビットか32ビット(WOW64)かによって、IoIs32bitProcess()の結果を変えます。つまり、
・プロセスが64ビットなら、生の構造体(32ビットサンクではない、64ビット対応バイナリレイアウトの構造体)を使用する
・プロセスが32ビットなら、32ビットサンク構造体を使用する
ように実装しなければなりません。
が、何しろドライバ側の問題なので、実装によってまちまちであることが考えられます。また、実装に不具合があることも考えられます(MSの実装は大丈夫だと思いますが)。そのため、ユーザーランドで柔軟に対応するには、64ビット版の場合は以下のようにするのが良いと思われます。
・64ビットの生の構造体定義を使用して、IOCTLを発行する。
・失敗した場合、32ビットサンク相当の構造体を使用して、IOCTLを発行する。
→この場合、成功しても正しいレイアウトの結果が返ってこない可能性があるので、
得られたデータはよく解析する必要があります。
3.10.0のコードをチラ見した感じでは、ATA_PASS_THROUGH_EXのDataBufferOffsetがDWORDのままなので、これが原因のような気がします。DWORD_PTRに変更すると、64ビットのバイナリレイアウトは32ビットサンク相当ではなく、64ビットネイティブ相当になります(試していないので、本当にOKかどうかわかりませんが…)。
#WDKのヘッダファイルを使用すれば、サンク用構造体も正しく定義されるので、
#独自定義から移行すると良いと思います。
#ATA_PASS_THROUGH(EXなし)などの足りない定義もありますが
参考になれば幸いです。それでは。
>名無しさん
スクロールバーの右クリックメニューにそんな機能があるなんて知りませんでしたw
何かをすれば動くようになると思うので、対応方法について調べてみます。
>ux-spiralさん
貴重な情報ありがとうございます。以前 64bit ビルドで ATA_PASS_THROUGH が正常動作していないことに気が付いたときに、DataBufferOffset を DWROD_PTR に変更したり色々頑張ってみたのですが本質を理解していないためか動作させることは出来ませんでした。
次回チャレンジしてみるときは、最新の WDK のヘッダファイルを眺めてみることにします。
ちなみに、WDK のヘッダを利用していない理由は普通の開発者は WDK をインストールしていないためそのままビルド出来ないと不便だろうと思っているからです。が、MFC 使っている時点でビルドできる方はごくごく一部なんでしょうねぇ。Visual C++ は 6.0 が全盛期だったのかもなぁ…
確かにWDKは普通の開発者にはマイナーですよね。昔は無償では手に入らなかったので、そう判断されたのだろうと思っていました。ご存知かと思いますが、最新版であれば無償でダウンロードできるので、敷居も低いと思います。
#最新版の不都合としては、Windows 2000非対応ですが、これはドライバを
#ビルドする際のライブラリの問題であって、ヘッダを利用するだけなら
#OKです。
4台増設可能なUSBの外付けHDDを繋げているのですが、物理的に4台のHDDそれぞれのステータスを取得出来ないでしょうか?
4台をHIJKとドライブレターを付けているのですが、現状Kドライブのデータのみしか表示されません。
RAIDや接続しているHDDを1つのHDDにみなす項目は使っておらず全て1台づつ使用の状態で使っております。
> Rio さん
残念ながら USB 接続で内部に複数台入るデバイスには対応しておりません。対応方法はわかっているのですが、USB に関する技術力が足りず自力で実装することが出来ませんでした。
恐らく AIDA64 は対応していると思いますのでお試しください。