刪除內容
最後必須刪除成功呼叫FltSetXxx內容所設定的每個內容。
當發生下列情況時,篩選管理員會自動刪除內容:
- 刪除內容所附加的物件
- 迷你篩選實例與磁片區中斷連結
- 已卸載迷你篩選驅動程式
因此,小型篩選很少需要明確刪除內容。
迷你篩選可以藉由呼叫下列其中一個內容刪除常式來刪除內容:
- FltDeleteCoNtext
- FltDeleteFileCoNtext
- FltDeleteInstanceCoNtext
- FltDeleteStreamCoNtext
- FltDeleteStreamHandleCoNtext
- FltDeleteTransactionCoNtext
- FltDeleteVolumeCoNtext
只有在目前 為物件設定內容時,才能刪除內容。 如果尚未設定內容,或已透過 成功呼叫 FltSetXxx內容來取代內容,則無法刪除內容。
FltDeleteXxxCoNtext常式會傳回OldCoNtext參數中舊內容的指標,如果OldCoNtext為非Null且未指向 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釋放已刪除的內容。