共用方式為


參考內容

篩選管理員會使用參考計數來管理迷你篩選內容的存留期。 參考計數是指出內容狀態的數位。

每當成功建立內容時,FltMgr 會將內容的參考計數初始化為一個。 這稱為對上下文的初始參考

每當引用上下文,例如成功的上下文設定取得,FltMgr 會將上下文的引用計數遞增一個。

當不再需要上下文時,其參考計數必須遞減。 正的參考計數表示上下文是可用的。 當引用計數變成零時,該上下文無法使用,並且 FltMgr 最終會釋放它。

FltMgr 會在物件被拆毀時釋放內容的初始參考(遞減參考計數為零),然後呼叫篩選條件的選擇性 內容清除回呼。 雖然這種情況很少發生,但如果迷你篩選必須在卸除之前從物件中移除內容,迷你篩選必須藉由呼叫 FltDeleteContext 安全地釋放該初始參考內容。

小型篩選程式可以藉由呼叫 FltReferenceContext,以增加其上下文的參照計數,將其自身的參照新增到上下文中。 迷你篩選程式最終必須藉由呼叫 FltReleaseContext 來移除這個新增的參考。

以下是一般對象的參考計數歷程記錄簡短範例。 假設所有 Flt API 呼叫都成功。

篩選回調函數 呼叫 Flt API 上下文引用計數 說明
PreCreate FltAllocateContext 1 篩選條件正在處理預先建立,並決定它可能想要追蹤檔案。 它會配置數據流內容,這會導致 FltMgr 將參考計數初始化為 1。 篩選條件會透過 CompletionContext 參數將內容傳遞至其 PostCreate 回呼。
PostCreate FltSetStreamContext 2 篩選條件會將在 PreCreate 期間配置的內容傳遞給其 PostCreate 回呼。 建立操作成功,因此篩選器會附加相關內容,這使得 FltMgr 遞增參考計數。
PostCreate FltReleaseContext 1 由於 FltSetStreamContext 會遞增參考計數,因此篩選條件需要移除額外的計數。 在篩選釋放內容之後,參考計數為 1,因此內容會保持運作。 如果篩選條件已決定它畢竟不在乎此檔案,它可能略過呼叫 FltSetStreamContext ,並直接呼叫 FltReleaseContext。 在此情況下,計數會移至0,且內容會解除分配。
PreRead FltGetStreamContext 2 篩選條件會看到讀取 I/O,並想要知道它是否正在追蹤此檔案。 它會要求其數據流內容並取得它,因此它知道它想要追蹤此檔案。 FltMgr 會遞增參考計數。
PreRead FltReleaseContext 1 篩選過程是利用其上下文來完成,因此當釋放它時,參考計數會遞減。 每個 FltGet*Context 都必須與 FltReleaseContext 進行平衡。
PreCleanup FltGetStreamContext 2 篩選會請求並取得其上下文,以遞增參考計數。
PreCleanup FltReleaseContext 1 篩選器使用上下文來完成,因此會釋放它,這會遞減參考計數。
內容清除回呼 0 檔案系統正在拆解基礎資料流物件。 (在數據流物件的特定案例中,會由IRP_MJ_CLOSE觸發卸除)。 FltMgr 會將參考計數遞減為 0,然後呼叫篩選器的內容清理回呼。 篩選條件現在有機會改善其情境。