WindowsXPのWDMデバイスドライバを使ってDeviceIoControlは使えますでしょうか。
ディスクドライブの情報取得をVxDのように使うにはどうしたらいいのでしょうか。
デバイスドライバを作るのではなく、実稼働しているドライバ
に対してDeviceIoControl API を使って、情報取得したい?
と云うことでしょうか?
一応、可能です。
また、S.M.A.R.T.使っても情報収集できますが・・・
どういうことしたいのか今一解りませんが、サンプルコードは
結構あると思いますヨ!
SDKやDDKを入手しておられるならば、SamplesやSrcフォルダ
の中身を見てもれば、近い機能のものもあると思います。
方法は・・・(あくまで一般的)
CreateFile で、ディスクドライブをオープンしハンドルを取得
DeviceIoControlで、コマンドを送信して情報取得
CloseHandle で、終わる・・・
コマンドは、対象となるデバイスによって異なりますので、DDK
のヘッダーや機器のリファレンスから探さないといけないかと。
以上。
DeviceIoControl API を使って情報取得したいのですが
VxDのVWIN32で以下のようにCreateFileしています。
HANDLE hvxd = CreateFile("\\\\.\\VWIN32", 0, 0, NULL, 0,
FILE_FLAG_DELETE_ON_CLOSE, NULL);
Regs.reg_EAX = 0x440d;
Regs.reg_EBX = 1;
Regs.reg_ECX = 0x860;
Regs.reg_EDX = (DWORD)&DevParams;
でDeviceIoControlを実行していますがWindowsXPでCreateFileで
hvxdでハンドルが帰らずINVALID_HANDLE_VALUEとなってエラーになってしまいます。
WinMeではうまくいきました。どうすればいいのでしょうか。
をを〜・・・
VxD って仮想86ドライバーのはずなんで、実質Win95/98しか
使えません。
因みに、上記のコマンドは何を取得するコマンドなのでしょうか?
その欲しい内容によって、デバイス名が変わります。
以上。
上記のコマンドはreg_EBX=1でFDDへのコマンドです。
FDDのMediaやSylinder数などの情報を取得するコマンドです。
デバイス名を変えてもWinXPでは使えない可能性が高いのでしょうか
DDKは持ってなく詳しいことは分かりません。
WinXPで取得できないようでしたら諦めます。宜しくお願いします。
そういう情報なら・・・
S.M.A.R.T.やWMIでも取得できると思いますが。
因みに、検索したら・・・
http://www.usefullcode.net/2007/02/hddsmart.html
こんなもの見つかりました。
以上。参考まで。
シリンダー数を調べて何をするのかわからないけど
(フォーマットするの?容量を調べるの?いずれにせよもっとよい代案あり)
9x 時代と比べて DeviceIoControl の使い方が大きく変化しているので XP なら XP 用のコードを書けばいい。
答え書いちゃうのは簡単だけどまずは自分で調べて味噌
ヒント
IOCTL_DISK_GET_DRIVE_GEOMETRY
DISK_GEOMETRY
追伸
WMIなら・・・
http://www.wmifun.net/sample/win32_diskdrive.html
ここの最後の『Win32_DiskDriveクラス』で目的の情報が
取得できます。
以上。
IOCTL_DISK_GET_DRIVE_GEOMETRYでXPで試したところ
目的の情報が得られました。またReadFileも実行できました。
いろいろアドバイス頂き有難うございました。
ツイート | ![]() |