Releasing Contexts 释放上下文
微過濾驅(qū)動(dòng)釋放上下文通過調(diào)用。每次成功調(diào)用下面例程最終都要調(diào)用和它們對(duì)應(yīng)的FltReleaseContext:
FltAllocateContext
FltGetXxxContext
FltReferenceContext
?
注意FltSetXxxContext返回的舊的上下文指針和FltDeleteContext返回的上下文指針必須被釋放當(dāng)他們不再需要
如下面的例子:
status?=?FltAllocateContext(
???????????FltObjects->Filter,???????????//驅(qū)動(dòng)
???????????FLT_INSTANCE_CONTEXT,?????????//上下文類型
???????????CTX_INSTANCE_CONTEXT_SIZE,????//上下文大小
???????????NonPagedPool,?????????????????//池子類型
???????????&instanceContext);???????????//返回的上下文
...
status?=?FltSetInstanceContext(
???????????FltObjects->Instance,??????????????//對(duì)象實(shí)例
???????????FLT_SET_CONTEXT_KEEP_IF_EXISTS,????//操作
???????????instanceContext,???????????????????//新的上下文
???????????NULL);?????????????????????????????//舊的上下文
if?(instanceContext?!=?NULL)?{
????FltReleaseContext(instanceContext);
}
return?status;
?
注意FltReleaseContext被調(diào)用不論調(diào)用FltSetInstanceContext是否成功。不論成功與否,調(diào)用者必須調(diào)用釋放FltAllocateContext引用。
如果上下文設(shè)置實(shí)例成功,FltSetInstanceContext添加自己的引用給實(shí)例上下文。因此,被FltAllocateContext設(shè)置的引用不再需要,我們要調(diào)用FltReleaseContext移除它。
如果失敗,上下文僅有一個(gè)引用,被 FltAllocateContext設(shè)置。當(dāng)FltReleaseContext返回,實(shí)例上下文引用數(shù)為0 ,它被微過濾驅(qū)動(dòng)釋放。
?
?
轉(zhuǎn)載于:https://www.cnblogs.com/dltao/archive/2010/12/29/1920583.html
總結(jié)
以上是生活随笔為你收集整理的Releasing Contexts 释放上下文的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ADO.NET Entity Frame
- 下一篇: java 正确使用 Volatile 变