|
▼よかせさん:
>ATAのコマンドのSMART READ DATAの結果が取れるカスタムControlCodeの存在は掴めませんでした。
>SiliconImageのRAIDツール(InstallSATARaid_v10027.ZIP)のDeviceIoControlをキャプチャして見ると、
>SMART関係は "SMART RETURN STATUS" しか使っていないようで、
>しかもそれはカスタムControlCodeではなく、一般的な、
>#define IOCTL_SCSI_MINIPORT_RETURN_STATUS ((FILE_DEVICE_SCSI << 16) + 0x0506)
>を使っていました。
ご回答ありがとうございました。
となると IDENTIFY_DEVICE を Silicon Image コマンドで取得しつつ、S.M.A.R.T. は WMI 経由で取得するというのが現実的ですね。
>SiliconImageのツールの表示では、
>Status Threshold : OK
>だけの表示なので、彼らにとってはSMART READ DATAまで立ち入る必要がないのかもしれません。
確かにシンプルなツールですしねぇ。
>なお、0x802以外のカスタムControlCodeは、送受信しているバイナリ列を見て想像するに
>0x800 Ide Management Version取得
>0x801 SATAコントローラチップの型番やIRQ、PCIバス番号等の取得
>0x803 内容みてもわからず
>0x807 HDDのキャッシュenable/disable設定変更
>0x808 内容みてもわからず
>のようでした。
おっと、そんなところまでわかりますか。さすがです。
>0x802のIDENTIFY DEVICEをする前に、
>0x800でバージョンチェックをしたほうがよさそうです。
>
>0x800は↓のような感じになります。
>#pragma pack(push, 1)
>typedef struct {
> SRB_IO_CONTROL sic ;
> USHORT major_version ;
> USHORT minor_version ;
>} SilIdeManagementVer ;
>#pragma pack(pop)
コマンドごとに構造体もやっぱり異なるんですねぇ。汎用的な何かを使っているのだとばかり思っていました。
>----
>別の話題になりますが、
>HDDのアクセスタイミングから回転数を推定できそうな気がしたので、
>冗談のつもりでやってみたら、そこそこの結果が得られたので、
>先日、某巨大掲示板のとあるスレにて↓としてお披露目してみました。
>http://www.ne.jp/asahi/zero/eight/junk/HddRpmEst01.zip
>一部問題があるものの、そこそこ良い感じの値が取れているようです。
おぉ〜〜うちの HDD ではバッチリ 5400rpm が得られました。これは面白いですねぇ〜。が、結果表示はちょっとバグってるかも。浮動小数点の下x桁まで延々と表示されてます。
>HDDに問い合わせて得られる情報を表示するのではないので、
>DiskInfoの方向性とは違うとは思いますが・・・。
回転数情報を返してくれない HDD はまだまだありますし、HDD の回転数は、4200, 5400, 5900, 7200, 10000?, 150000 ぐらいしかないので適当にマッチングさせればそれっぽい表示はできそうですね。
ところで、よかせさんの Web ページはありますか?もしあれば教えていただきたいなと。
【HDD回転数推定.png : 31.2KB】
|
|