共用方式為


判斷驅動程式是否外泄 Framework 物件

本主題描述如何尋找未發行參考所造成的驅動程式記憶體流失。 它適用于 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 驗證器和處理登錄中的追蹤。 這兩個設定都會儲存在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\WUDF\Services\驅動程式名稱 > 索引鍵的驅動程式 Parameters\Wdf 子機碼 <中。

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

    若要啟用控制碼追蹤,請將 TrackHandles 的值設定為一或多個物件類型的名稱,或指定星號 (*) 來追蹤所有物件類型。

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

  3. 重新開機、建立偵錯工具連線,然後使用下列偵錯工具命令:

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

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