摘要:
驱动管理器用引用数量管理一个微过滤驱动的生命周期。引用数量是一个数,它表明上下文的状态 。当上下文被创建,引用数量被实例化为1(实例引用上下文)。当一个上下文被系统组件引用,上下文的引用数量增长1。当一个上下文不再需要时,它的引用数量减少。一个正数的引用数量表明上下文是有用的。当引用数量变成0时,上下文不再有用,过滤管理器最终释放它 。对上下文的实例引用被释放当对象被卸载。然而,如果一个微过滤驱动必须从一个对象上移除上下文,微过滤驱动必须释放对上下文的实例引用。为了安全的释放对上下文的实例引用,微过滤驱动调用FltDeleteContext。微过滤驱动能对一个上下文添加自己的引用通过调用Flt 阅读全文
摘要:
一旦一个微过滤驱动已经为一个对象设置了上下文,它能获得上下文通过调用FltGetXxxContext,其中Xxx代表上下文类型下面例子获得一个卷(Volume)上下文:status=FltGetVolumeContext(FltObjects-Filter,//FilterFltObjects-Volume,//Volume&volCtx);//Context...if(volCtx!=NULL){FltReleaseContext(volCtx);}如果调用FltGetVolumeContext成功,上下文接收一个调用者的卷上下文的的地址。FltGetVolumeContext增加上下文 阅读全文
摘要:
在创建一个上下文之后,微过滤驱动能把它和一个对象绑定 ,通过调用FltSetXxxContext ,Xxx代表上下文类型。如果Operation变量 被设为 FLT_SET_CONTEXT_KEEP_IF_EXISTS,FltSetXxxContext绑定一个新的上下文和一个对象仅在微过滤驱动没有为这个对象设置上下文时成功 。如果设置了,则会失败,返回状态STATUS_FLT_CONTEXT_ALREADY_DEFINED,新的上下文不会替代旧的上下文 。如果旧的上下文不是空non-NULL,它接收到一个指向旧的上下文的指针,当旧的上下文不用时,微过滤驱动需要释放它,通过调用FltReleas 阅读全文
摘要:
一旦一个微过滤驱动已经注册了它使用的上下文类型,它能创建一个上下文通过调用FltAllocateContext。这个例程根据上下文类型标准选择正确的上下文定义。例如,我们创建一个上下文实例如下:status=FltAllocateContext(FltObjects-Filter,//驱动FLT_INSTANCE_CONTEXT,//上下文类型CTX_INSTANCE_CONTEXT_SIZE,//上下文大小NonPagedPool,//池子类型&instanceContext);//返回的上下文它的原型如下:NTSTATUSFltAllocateContext(INPFLT_FILTERF 阅读全文
摘要:
当一个微过滤驱动调用FltRegisterFilter从它的入口函数,它必须注册每一个要用到的上下文类型。为了注册上下文类型,微过滤驱动创建一个可变长的数组存储 FLT_CONTEXT_REGISTRATION 结构体,并且在FLT_REGISTRATION 结构体里存储一个指向 FLT_CONTEXT_REGISTRATION 结构体的指针 ContextRegistration,微过滤驱动传递FLT_REGISTRATION 结构体的参数给FltRegisterFilter。数组里FLT_CONTEXT_REGISTRATION 结构体的顺序没有关系,但是最后要以{FLT_CONTEXT_ 阅读全文
摘要:
上下文是一个结构体,它被微过滤驱动定义并和过滤器管理对象绑定。微过滤驱动能创建并设置上下文为下列对象:(文件)Files (WindowsVista and later only.) (实例)Instances (卷)Volumes (流)Streams (流句柄)Stream handles (file objects) (事务)Transactions (WindowsVista and later only.) 除了卷(Volume)上下文必须被非分页区分配之外,其他既可以被分页区分配也可以被非分页区分配。当上下文绑定的对象被删除时,当微过滤驱动实例从卷中被删除或当微过滤驱动被卸载时,驱 阅读全文