我所在的公司在世界各地拥有许多机器,我们需要从客户那里获得持续的诊断信息。其中一个问题是机器的硬盘偶尔会进入 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
值(最明显的DeviceType
)与 PIO 模式 PATA DVD-RW 驱动器不同。但我无法快速找到这些值的定义。
答案2
或许这将帮助您创建 VBScript 来解决您的问题,并解释 DMA 如何恢复到 PIO 以及可能的解决方案。
你也可以查看窗口 wmic 命令 , 例如 ”wmic dmachannel 获取/值“检索您的信息并将其放入您的代码的“shell”命令中,并可能实现您的 Windows API 的自动化。