釋放內容
迷你篩選會藉由呼叫 FltReleaseCoNtext來釋放內容。 下列其中一個常式的每個成功呼叫最終都必須與 FltReleaseCoNtext的呼叫相符:
內容建立常式:
內容取得常式:
內容集常式:
內容參考遞增常式:
請注意,FltSetXxxCoNtext所傳回的OldCoNtext指標和FltDeleteCoNtext傳回的內容指標也必須在不再需要時釋放。
在下列程式碼範例中,從 CTX 範例迷你篩選擷取, CtxInstanceSetup 常式會建立並設定實例內容,然後呼叫 FltReleaseCoNtext:
status = FltAllocateContext(
FltObjects->Filter, //Filter
FLT_INSTANCE_CONTEXT, //ContextType
CTX_INSTANCE_CONTEXT_SIZE, //ContextSize
NonPagedPool, //PoolType
&instanceContext); //ReturnedContext
...
status = FltSetInstanceContext(
FltObjects->Instance, //Instance
FLT_SET_CONTEXT_KEEP_IF_EXISTS, //Operation
instanceContext, //NewContext
NULL); //OldContext
if (instanceContext != NULL) {
FltReleaseContext(instanceContext);
}
return status;
請注意,不論FltSetInstanceCoNtext的呼叫是否成功,都會呼叫FltReleaseCoNtext:
如果 FltSetInstanceCoNtext 成功,它會將自己的參考新增至實例內容 (也就是說,它會遞增實例內容上的參考計數) 。 因此,不再需要 FltAllocateCoNtext 所設定的參考,而 FltReleaseCoNtext 的呼叫會移除它。
如果 FltSetInstanceCoNtext 失敗,實例內容只有一個參考,也就是 FltAllocateCoNtext所設定的參考。 當 FltReleaseCoNtext傳回時,實例內容的參考計數為零,並由篩選管理員釋放。