如何從命令列或以程式方式偵測硬碟是否處於 PIO 或 DMA 模式?

如何從命令列或以程式方式偵測硬碟是否處於 PIO 或 DMA 模式?

我工作的公司在世界各地擁有許多機器,我們需要從客戶那裡獲得持續的診斷。問題之一是機器的硬碟偶爾會切換到 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 中似乎沒有任何內容反映 WMI 中裝置管理員的「進階設定」標籤的內容。

但是,使用路徑 abve ( 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 提供可能的自動化。

相關內容