參考內容

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

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

每當參考內容時,例如透過成功的內容 get,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,然後呼叫篩選準則的內容清除回呼。 篩選現在有機會清除其內容。