迷你篩選程式會藉由呼叫 FltReleaseContext 來釋放內容。 下列其中一個例程的每個成功呼叫最終都必須與 FltReleaseContext 的呼叫相符:
內容建立例程:
內容取得例程:
上下文設置例程
內容參考遞增例程:
請注意,FltSetXxxContext 所傳回的 OldContext 指標,以及 FltDeleteContext 所傳回的 Context 指標,在不再需要時也必須釋放它們。
在下列程式代碼範例中,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 傳回時,實例內容的參考計數為零,並由篩選管理員釋放。