Deleting Contexts 删除上下文
每个上下文调用 成功,最后都必须被删除。但是,微过滤驱动自动的删除上下文当上下文绑定的对象被删除,当微过滤驱动实例被卸载或当微过滤驱动从卷中被卸载。因此,对一个微过滤驱动来说,删除上下文不太必要。
微过滤驱动能删除上下文通过调用FltDeleteXxxContext,Xxx是上下文类型,也可以调用 FltDeleteContext。
一个上下文能被删除,当设置为绑定一个对象时。上下文不能被删除,如果没有被设置,或者它被一个新的上下文成功取代通过调用FltSetXxxContext。
在调用FltDeleteXxxContext 时,旧的上下文通过OldContent参数返回,如果它是非空的话。如果OldContent参数是空,驱动管理器减少上下文的引用数量 。
下面示例删除一个流上下文(stream context):
status = FltDeleteStreamContext(
FltObjects->Instance, //实例
FltObjects->FileObject, //文件对象
&oldContext); //旧的上下文
...
if (oldContext != NULL) {
FltReleaseContext(oldContext); //如果旧的上下文不为空,最终要调用此函数
}
在这个例子中,FltDeleteStreamContext移除了流上下文从流中,但是它不减少上下文引用数量,因为旧的上下文参数是非空的。FltDeleteStreamContext返回要删除旧的上下文地址。调用者最后必须调用FltReleaseContext。