成功呼叫 FltSetXxxContext 設定的每個上下文最終必須被刪除。
篩選管理員會在發生下列情況時自動刪除內容:
- 刪除內容所附加的物件
- 小型篩選器實例從磁碟區分離
- 小型篩選驅動程式已卸除
因此,小型篩選程式很少需要明確刪除內容。
迷你篩選器可以透過呼叫以下其中一個內容刪除程序來刪除內容:
- FltDeleteContext
- FltDeleteFileContext
- FltDeleteInstanceContext
- FltDeleteStreamContext
- FltDeleteStreamHandleContext
- FltDeleteTransactionContext
- FltDeleteVolumeContext
只有在目前 設為物件的情境時,才能刪除情境。 如果尚未設定該上下文,或該上下文已被成功呼叫 FltSetXxxContext 取代,則無法刪除該上下文。
如果 OldContext 不是 NULL,則 FltDeleteXxxContext 例程會傳回 OldContext 參數中舊內容的指標,而不會指向NULL_CONTEXT。 如果 OldContext 為 NULL,篩選管理員就會遞減內容上的參考計數,然後釋放該內容,除非微篩選器有未處理的參考。
下列程式代碼範例示範如何刪除資料流內容:
status = FltDeleteStreamContext(
FltObjects->Instance, //Instance
FltObjects->FileObject, //FileObject
&oldContext); //OldContext
//
// Perform any needed processing
// ...
//
if (oldContext != NULL) {
FltReleaseContext(oldContext);
}
在此範例中, FltDeleteStreamContext:
- 從數據流中移除流上下文。
- 不會遞減上下文的參考計數,因為 OldContext 參數不是 NULL。
- 傳回 OldContext 參數中已刪除內容的位址(已從數據流移除的內容)。
由於非 NULL OldContext 參數,在執行任何必要的處理之後,過濾器必須藉由呼叫 FltReleaseContext 來釋放已刪除的上下文。