判斷反映器終止主機進程的原因

本主題描述如何分析反映器終止驅動程式主機進程的原因(WUDFHost.exe),或驅動程式主機進程當機的原因。

反映器終止主機進程最常見的原因是UMDF 主機進程逾時到期

強烈建議您使用連結至測試系統的核心調試程式,在 WUDFHost.exe 上啟用 應用程式驗證器 (AppVerif.exe) 執行 UMDF 驅動程式的所有開發和測試。 使用下列命令,附加核心調試程式,然後重新啟動。

AppVerif –enable Heaps Exceptions Handles Locks Memory TLS Leak –for WudfHost.exe

使用傾印檔案

當您的UMDF驅動程式當機或遇到問題時,核心調試程式中會回報中斷。 在核心調試程式中回報使用者模式例外狀況時,應該偵錯這些問題。 核心調試程式中斷也會由WudfRd.sys在終止驅動程式主機進程之前回報,因為有問題(無回應)的 UMDF 驅動程式。 您也會在下列位置找到回報的記錄和堆積傾印。 若要檢閱 UMDF 所擷取的傾印檔案,請遵循下列步驟:

  1. 在 %ProgramData%\Microsoft\WDF 目錄中找出最新的.dmp檔案。 在隨附於 Windows 10 1507 的 UMDF 2.15 之前,記錄目錄位於 %windir%\system32\LogFiles\WUDF 之下。

  2. 使用下列命令,將最新的.dmp檔案載入除錯程式:

    WinDbg -z <path to the .dmp file>
    
  3. 查看終止時線程的狀態。

如果您需要擷取堆積傾印,請在測試時設定下列登錄值,並在執行測試之前重新開機測試系統。 您也可以在 %SystemRoot%\System32\Winevt\Logs\Application.evtx 檢查系統應用程式事件記錄檔中的 Windows 錯誤報告 歷程記錄

reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogMinidumpType /t REG_DWORD /d 0x1122
reg add "HKLM\Software\Microsoft\windows NT\CurrentVersion\Wudf" /v LogEnable /t REG_DWORD /d 1 

使用偵錯工具

在其他情況下,您可能需要附加至即時內核模式目標,以判斷反映器終止主機進程的原因。 若要設定偵錯會話,請遵循如何啟用 UMDF 驅動程式偵錯中所述的步驟。

建立連線之後,請使用 !wdfkd.wdfumtriage 來檢查 UMDF 驅動程式,使用 !wdfkd.wdfumirps UMDF 調試程式擴充功能來顯示未處理的 IRP(!wudfext.umirps for UMDF 第 1 版)。

  • 如果 PnP IRP 或電源 IRP 擱置中,請藉由檢查主機進程中的線程,判斷驅動程式導致 IRP 停止回應的原因。

    您可以使用 !process 擴充功能來檢查在主機進程中執行的線程。 0x1f旗標值會顯示每個線程的堆疊追蹤。

    !process process <addr> 0x1f

  • 如果您的驅動程式尚未快速完成已取消的 IRP,請判斷哪一個 IRP 已取消,以及它未完成的原因。

  • 如果清除或關閉 IRP 擱置中,請判斷為何 IRP 需要很長的時間來處理。