共用方式為


判斷驅動程式是否洩漏架構物件

本主題描述如何尋找因未釋放引用而導致的驅動程式記憶體洩漏。 它適用於 User-Mode Driver Framework (UMDF) 第 1 版和 2 版驅動程式。

UMDF 1

在 UMDF 第 1 版中,如果每次呼叫 AddRef 沒有相對應的 Release 呼叫,呼叫堆疊可能會導致記憶體洩漏。

若要測試您的 UMDF 第 1 版驅動程式是否洩漏架構物件,請使用下列步驟:

  1. 使用 WDF 驗證器控制程式應用程式 來設定您想要的驗證器選項。 在一般測試期間,請從設定 TrackObjects,而不是 TrackRefCounts開始。

    卸除驅動程式時,架構的程式代碼驗證器會在未刪除架構物件時輸入調試程式,並提示您使用 !wudfdumpobjects 調試程序擴充功能。 這個調試程式延伸模組會顯示未刪除的物件清單。

  2. 如果程式代碼驗證器指出驅動程式正在外泄架構物件,請使用控件應用程式來設定 TrackRefCounts 選項。

    如果已設定此選項,驗證程式會在驅動程式執行時追蹤架構對象的參考。 您可以使用 !wudfrefhist 調試程式延伸模組來顯示遞增或遞減物件參考計數的每個呼叫堆疊(函數調用集)。 藉由檢查這些呼叫堆疊中的 AddRefRelease 呼叫,您應該能夠找到不會遞減對象的參考計數,因而造成洩漏的堆疊。

如需其他驗證程式選項的詳細資訊,請參閱 使用 UMDF 驗證程式

如需何時刪除架構物件的資訊,請參閱 管理物件的存留期

UMDF 2

在 UMDF 第 2 版中,未釋放的引用很少見,但可能會因為使用 WdfObjectReferenceWdfObjectDereference時呼叫不匹配而發生。

若要測試您的 UMDF 第 2 版驅動程式是否外洩架構物件,請使用下列程式:

  1. 請遵循 最佳做法 中所述的步驟來設定您的計算機進行 UMDF 偵錯。

  2. 若要使用標籤追蹤,請同時啟用 UMDF 驗證器和處理登錄中的追蹤。 這兩個設定都會儲存在驅動程式的 Parameters\Wdf 子項的 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\<驅動程式名稱> 機碼中。

    若要啟用 UMDF 驗證器,請為 VerifierOn 設定非零值。

    若要啟用句柄追蹤,請將 TrackHandles 的值設定為一或多個物件類型的名稱,或指定星號 ≦ 來追蹤所有物件類型。

    您也可以使用 WdfVerifier.exe 應用程式來修改 UMDF 驗證器設定。

  3. 重新啟動、建立調試程式連線,然後使用下列調試程式命令:

如果UMDF驗證器已開啟,則會在驅動程式卸載時偵測到記憶體流失,就像在 KMDF 中一樣。

如需在 KMDF 和 UMDF 第 2 版驅動程式中使用參考計數的詳細資訊,請參閱 Framework 物件生命週期