¿Cómo detectar si un disco duro está en PIO o DMA desde la línea de comandos o mediante programación?

¿Cómo detectar si un disco duro está en PIO o DMA desde la línea de comandos o mediante programación?

Trabajo para una empresa que tiene muchas máquinas en todo el mundo en posesión de clientes de las que necesitamos obtener diagnósticos continuos. Uno de los problemas es que ocasionalmente los discos duros de las máquinas pasan al modo PIO, pero, por supuesto, lo único que ve el cliente es una desaceleración masiva del sistema.

Estoy buscando una manera de detectar si un disco duro SATA ha caído al modo PIO a través de nuestras herramientas de diagnóstico. Puede ser una herramienta o un comando que podemos ejecutar y almacenar el resultado para luego agruparlo en un volcado que el cliente nos envía por correo electrónico, o mediante programación a través de una API de Windows.

Tiene que ser lo más automático posible. Intenté usar 'devcon.exe' (administrador de dispositivos de línea de comandos), pero no encontré cómo generar esa información incluso si obtengo información sobre los controladores del disco duro.

¿Algunas ideas?

Respuesta1

(Esto utiliza PowerShell en Windows 7, pero debería poder hacer lo mismo en Windows XP después de instalar PowerShell).

Obtener el objeto WMI asociado con un dispositivo IDE específico (tanto PATA como SATA se tratan como IDE en este nivel):

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

(En este caso solía devmegmt.mscobtener la "Ruta de instancia del dispositivo" para un canal SATA con un disco conectado, pero se puede consultar).

Pero estoWin32_IDEControllerEl objeto no tiene nada sobre la configuración PIO/DMA. La búsqueda de asociaciones WMI tampoco muestra nada (en un par de niveles).

No parece haber nada en WMI que refleje el contenido de la pestaña "Configuración avanzada" del administrador de dispositivos en WMI.

Sin embargo, usando el último elemento de la ruta anterior ( 4&5ECF4F&0&0) puedo hacerlo en el registro en:

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

valores (más notablemente DeviceType) que difieren para una unidad PATA DVD-RW en modo PIO aquí. Pero no puedo encontrar rápidamente una definición para estos valores.

Respuesta2

Tal vezestelo ayudará a crear VBScript para resolver su problema y donde hay una explicación sobre cómo DMA vuelve a PIO con posibles soluciones.

Y también puedes comprobar un pocoComandos de ventana wmic , Por ejemplo "wmic dmachannel obtener/valor" para recuperar su información y ponerla en un comando "shell" para su código y para una posible automatización de su API de Windows.

información relacionada