コマンドラインまたはプログラムからハードドライブが PIO または DMA になっているかどうかを検出するにはどうすればよいでしょうか?

コマンドラインまたはプログラムからハードドライブが PIO または DMA になっているかどうかを検出するにはどうすればよいでしょうか?

私は、世界中の顧客が所有する多数のマシンを所有する会社で働いており、それらのマシンから継続的に診断を受ける必要があります。問題の 1 つは、マシンのハード ドライブが時々 PIO モードに落ちることですが、もちろん、顧客が目にするのはシステムの大幅な速度低下だけです。

診断ツールを使用して、SATA ハード ドライブが PIO モードに落ちたかどうかを検出する方法を探しています。これは、実行して出力を保存し、後で顧客から電子メールで送信されるダンプにバンドルしたり、Windows API を介してプログラム的に実行したりできるツールまたはコマンドのいずれかです。

できるだけ自動化する必要があります。「devcon.exe」(コマンド ライン デバイス マネージャー) を使用してみましたが、ハード ドライブ コントローラーに関する情報を取得しても、その情報を出力する方法が見つかりません。

何か案は?

答え1

(これは Windows 7 上の PowerShell を使用していますが、PowerShell をインストールすれば Windows XP でも同じことができるはずです。)

特定の IDE デバイスに関連付けられた WMI オブジェクトを取得します (このレベルでは PATA と SATA の両方が IDE として扱われます)。

$ide = new-object "system.management.managementobject" 'Win32_IDEController.DeviceID="PCIIDE\\IDECHANNEL\\4&5ECF4F&0&0"'

(この場合、devmegmt.msc接続されたディスクを持つ SATA チャネルの「デバイス インスタンス パス」を取得していましたが、これを照会することもできます。)

しかしこれはWin32_IDEControllerオブジェクトには PIO/DMA 設定に関する情報がまったくありません。WMI の関連付けを調べても何も見つかりません (いくつかのレベルまで)。

WMI には、デバイス マネージャーの [詳細設定] タブの内容を反映するものはないようです。

ただし、上記のパスの最後の要素 ( 4&5ECF4F&0&0) を使用すると、レジストリの次の場所に移動できます。

HKLM:\SYSTEM\CurrentControlSet\Enum\PCIIDE\IDEChannel\4&5ecf4f&0&0\Device Parameters\Target0

ここでは、PIO モード PATA DVD-RW ドライブで異なる値 (特にDeviceType) を示します。ただし、これらの値の定義をすぐに見つけることはできません。

答え2

多分これ問題を解決するための VBScript の作成に役立ちます。また、DMA が PIO に戻る仕組みと可能な解決策についての説明もあります。

また、少し確認することもできますウィンドウ wmic コマンド 、 例えば "wmic dmachannel 取得 / 値「」を使用して情報を取得し、それをコードの「シェル」コマンドに入力し、Windows API の自動化を可能にします。

関連情報