參考內容
篩選管理員會使用參考計數來管理迷你篩選內容的存留期。 參考計數是指出內容狀態的數位。
每當成功建立內容時,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,然後呼叫篩選準則的內容清除回呼。 篩選現在有機會清除其內容。 |