WindowsXPのWDMデバイスドライバについて

解決


TOYAMA  2009-05-08 21:38:19  No: 70132

WindowsXPのWDMデバイスドライバを使ってDeviceIoControlは使えますでしょうか。
ディスクドライブの情報取得をVxDのように使うにはどうしたらいいのでしょうか。


オショウ  2009-05-08 22:25:15  No: 70133

デバイスドライバを作るのではなく、実稼働しているドライバ
に対してDeviceIoControl API を使って、情報取得したい?
と云うことでしょうか?

一応、可能です。

また、S.M.A.R.T.使っても情報収集できますが・・・

どういうことしたいのか今一解りませんが、サンプルコードは
結構あると思いますヨ!

SDKやDDKを入手しておられるならば、SamplesやSrcフォルダ
の中身を見てもれば、近い機能のものもあると思います。

方法は・・・(あくまで一般的)
CreateFile で、ディスクドライブをオープンしハンドルを取得
DeviceIoControlで、コマンドを送信して情報取得
CloseHandle で、終わる・・・

コマンドは、対象となるデバイスによって異なりますので、DDK
のヘッダーや機器のリファレンスから探さないといけないかと。

以上。


TOYAMA  2009-05-08 22:39:48  No: 70134

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ではうまくいきました。どうすればいいのでしょうか。


オショウ  2009-05-08 22:59:08  No: 70135

をを〜・・・

VxD って仮想86ドライバーのはずなんで、実質Win95/98しか
使えません。

因みに、上記のコマンドは何を取得するコマンドなのでしょうか?
その欲しい内容によって、デバイス名が変わります。

以上。


TOYAMA  2009-05-08 23:23:25  No: 70136

上記のコマンドはreg_EBX=1でFDDへのコマンドです。
FDDのMediaやSylinder数などの情報を取得するコマンドです。
デバイス名を変えてもWinXPでは使えない可能性が高いのでしょうか

DDKは持ってなく詳しいことは分かりません。
WinXPで取得できないようでしたら諦めます。宜しくお願いします。


オショウ  2009-05-09 00:23:31  No: 70137

そういう情報なら・・・
S.M.A.R.T.やWMIでも取得できると思いますが。

因みに、検索したら・・・
http://www.usefullcode.net/2007/02/hddsmart.html

こんなもの見つかりました。

以上。参考まで。


tetrapod  2009-05-09 00:25:11  No: 70138

シリンダー数を調べて何をするのかわからないけど
(フォーマットするの?容量を調べるの?いずれにせよもっとよい代案あり)

9x 時代と比べて DeviceIoControl の使い方が大きく変化しているので XP なら XP 用のコードを書けばいい。
答え書いちゃうのは簡単だけどまずは自分で調べて味噌
ヒント
IOCTL_DISK_GET_DRIVE_GEOMETRY
DISK_GEOMETRY


オショウ  2009-05-09 00:29:33  No: 70139

追伸

WMIなら・・・
http://www.wmifun.net/sample/win32_diskdrive.html

ここの最後の『Win32_DiskDriveクラス』で目的の情報が
取得できます。

以上。


TOYAMA  2009-05-09 04:04:01  No: 70140

IOCTL_DISK_GET_DRIVE_GEOMETRYでXPで試したところ
目的の情報が得られました。またReadFileも実行できました。
いろいろアドバイス頂き有難うございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加