DOBON.NET DOBON.NETプログラミング掲示板過去ログ

WMIを使って「ドライブの情報を取得する」について

  • 題名: WMIを使って「ドライブの情報を取得する」について
  • 著者: ひろ
  • 日時: 2007/06/18 18:19:39
  • ID: 19867
  • この記事の返信元:
    • (なし)
  • この記事への返信:
    • (なし)
  • ツリーを表示
環境/言語:[VB.NET2003、NET Framework 1.1]
分類:[.NET]

USBメモリなどのリムーバブルデバイスの情報(特にセクタ数)を取得するシステムを作成中です。

こちらのサイトの下記内容を参考に、WMIを使って一応思い通りの情報を取得することは出来ました。
ドライブの情報(タイプ、ボリュームラベル、ファイルシステムなど)を取得する
http://dobon.net/vb/dotnet/file/driveinfo.html

が、なぜか実測値(デバイスのプロパティ上の数字)とは合いません。
例えば公称512MBのUSBメモリだと下記のようになります。
実測バイト数:516,661,248
WMI上の取得size:509,967,360
※この数字はその他の数値(Track、Cylinder、Sectors)から計算した理論上のサイズとも一致します。

公称:128MB
実測バイト数:130,035,712
WMI上の取得size:123,379,200
他にもHDDやSDカードなど色々試しましたが全て同じような感じです。ズレの幅は毎回違います(特に比例する訳でもありません)。

他にAPI関数を用いる方法も試してみたところ、こちらは実測値に合う結果が出ました。
GetDiskFreeSpace、GetDiskFreeSpaceEx関数
参考:http://www.winapi-database.com/tips/6/

正確なセクタ数を取得するというのがそもそもの第一目的なので、WMIの取得がどうしてもずれるのが仕様であれば他の方法を使いますが・・・その他の参照データも含めてこちらの方が便利なのできればWMIでまとめてやっておきたいのです(FramWork2.0のDriveInfoは今回はできれば使いたくないですが他に方法がないならそちらに移ることも可能です)。

質問としては、WMIで取得したSIZEは何らかの補正をすれば実測値とぴったり合うのかどうか。
もう一つついでなんですが、WMIで取得したセクタ数はそもそもどこの情報を参照しているのでしょうか。MBRからでしょうか? ご存知の方いましたら教えてください。
参考:http://lets-go.hp.infoseek.co.jp/dd.html

DOBON.NET | プログラミング道 | プログラミング掲示板