Я работаю в компании, у которой есть много машин по всему миру, находящихся в собственности клиентов, от которых нам нужно получать непрерывную диагностику. Одна из проблем заключается в том, что иногда жесткие диски машин переходят в режим PIO, но, конечно, все, что видит клиент, — это огромное замедление системы.
Я ищу способ определить, перешел ли жесткий диск SATA в режим PIO с помощью наших диагностических инструментов. Это может быть либо инструмент, либо команда, которую мы можем запустить и сохранить вывод для последующего объединения в дамп, который мы получаем по электронной почте от клиента, либо программно через Windows API.
Это должно быть максимально автоматическим. Я пробовал использовать 'devcon.exe' (диспетчер устройств командной строки), но не нашел, как вывести эту информацию, даже если я получаю информацию о контроллерах жестких дисков.
Есть идеи?
решение1
(Здесь используется PowerShell в Windows 7, но вы сможете делать то же самое в Windows XP после установки PowerShell.)
Получение объекта WMI, связанного с определенным устройством IDE (на этом уровне как PATA, так и SATA рассматриваются как IDE):
$ide = new-object "system.management.managementobject" 'Win32_IDEController.DeviceID="PCIIDE\\IDECHANNEL\\4&5ECF4F&0&0"'
(В этом случае я использовал devmegmt.msc
для получения «Пути к экземпляру устройства» для канала SATA с подключенным диском, но это можно сделать и запросив.)
Но этоWin32_IDEController
object не имеет ничего о настройке PIO/DMA. Поиск по ассоциациям WMI также ничего не показывает (до пары уровней).
Похоже, в WMI нет ничего, что отражало бы содержимое вкладки «Дополнительные параметры» диспетчера устройств в WMI.
Однако, используя последний элемент из пути выше ( 4&5ECF4F&0&0
), я могу в реестре:
HKLM:\SYSTEM\CurrentControlSet\Enum\PCIIDE\IDEChannel\4&5ecf4f&0&0\Device Parameters\Target0
значения (в частности DeviceType
), которые отличаются для привода PATA DVD-RW в режиме PIO здесь. Но я не могу быстро найти определение для этих значений.
решение2
Может бытьэтотпоможет вам создать VBScript для решения вашей проблемы, а также даст объяснение того, как DMA возвращается к PIO с возможными решениями.
А также вы можете немного проверитьКоманды Windows WMIC , например "wmic dmachannel получить / значение" для извлечения вашей информации и помещения ее в команду "shell" для вашего кода и для возможной автоматизации вашего API Windows.