摘要: 总体结构:Pch.h 包含了所有用到的头文件 ,这也是写驱动的一个技巧 ,用一个头文件包含所有需要的头文件 ,以后的.c 文件只要引用这一个头文件即可 。CtxStruct.h 头文件,定义了所有需要用到的结构体 ,这样如果不是系统自带的结构体 ,找不到的结构体一定在这里 。CtxProc.h 头文件,定义了所有将要实习的方法,在msdn里找不到的方法,原型一定在这里 。Context.c 所有自定义的对上下文操作的方法的实现在这个文件里 。Operations.c 实现FLT_OPERATION_REGISTRATION中各种callback方法 ,主要的功能实现都在这里 。Support. 阅读全文
posted @ 2010-12-29 16:52 UnhandleException 阅读(2362) 评论(0) 推荐(0) 编辑
摘要: 上下文被删除之后,它的未解决的引用被释放之后,上下文被释放。有一个特例:如果上下文已经被创建,但是没有被 设置,它不需要被删除。它被释放当它的引用数量为0时。当一个微过滤驱动注册它的上下文类型,每一个上下文定义包括一个清除的回调函数,这个回调函数被在上下文被释放之前调用。 阅读全文
posted @ 2010-12-29 14:51 UnhandleException 阅读(243) 评论(0) 推荐(0) 编辑
摘要: 每个上下文调用 成功,最后都必须被删除。但是,微过滤驱动自动的删除上下文当上下文绑定的对象被删除,当微过滤驱动实例被卸载或当微过滤驱动从卷中被卸载。因此,对一个微过滤驱动来说,删除上下文不太必要。微过滤驱动能删除上下文通过调用FltDeleteXxxContext,Xxx是上下文类型,也可以调用 FltDeleteContext。一个上下文能被删除,当设置为绑定一个对象时。上下文不能被删除,如果没有被设置,或者它被一个新的上下文成功取代通过调用FltSetXxxContext。在调用FltDeleteXxxContext 时,旧的上下文通过OldContent参数返回,如果它是非空的话。如果O 阅读全文
posted @ 2010-12-29 14:29 UnhandleException 阅读(402) 评论(0) 推荐(0) 编辑
摘要: 微过滤驱动释放上下文通过调用。每次成功调用下面例程最终都要调用和它们对应的FltReleaseContext:FltAllocateContext FltGetXxxContext FltReferenceContext 注意FltSetXxxContext返回的旧的上下文指针和FltDeleteContext返回的上下文指针必须被释放当他们不再需要如下面的例子:status=FltAllocateContext(FltObjects-Filter,//驱动FLT_INSTANCE_CONTEXT,//上下文类型CTX_INSTANCE_CONTEXT_SIZE,//上下文大小NonPage 阅读全文
posted @ 2010-12-29 14:07 UnhandleException 阅读(532) 评论(0) 推荐(0) 编辑
摘要: 驱动管理器用引用数量管理一个微过滤驱动的生命周期。引用数量是一个数,它表明上下文的状态 。当上下文被创建,引用数量被实例化为1(实例引用上下文)。当一个上下文被系统组件引用,上下文的引用数量增长1。当一个上下文不再需要时,它的引用数量减少。一个正数的引用数量表明上下文是有用的。当引用数量变成0时,上下文不再有用,过滤管理器最终释放它 。对上下文的实例引用被释放当对象被卸载。然而,如果一个微过滤驱动必须从一个对象上移除上下文,微过滤驱动必须释放对上下文的实例引用。为了安全的释放对上下文的实例引用,微过滤驱动调用FltDeleteContext。微过滤驱动能对一个上下文添加自己的引用通过调用Flt 阅读全文
posted @ 2010-12-29 13:46 UnhandleException 阅读(269) 评论(0) 推荐(1) 编辑
摘要: 一旦一个微过滤驱动已经为一个对象设置了上下文,它能获得上下文通过调用FltGetXxxContext,其中Xxx代表上下文类型下面例子获得一个卷(Volume)上下文:status=FltGetVolumeContext(FltObjects-Filter,//FilterFltObjects-Volume,//Volume&volCtx);//Context...if(volCtx!=NULL){FltReleaseContext(volCtx);}如果调用FltGetVolumeContext成功,上下文接收一个调用者的卷上下文的的地址。FltGetVolumeContext增加上下文 阅读全文
posted @ 2010-12-29 13:29 UnhandleException 阅读(285) 评论(0) 推荐(0) 编辑
摘要: 在创建一个上下文之后,微过滤驱动能把它和一个对象绑定 ,通过调用FltSetXxxContext ,Xxx代表上下文类型。如果Operation变量 被设为 FLT_SET_CONTEXT_KEEP_IF_EXISTS,FltSetXxxContext绑定一个新的上下文和一个对象仅在微过滤驱动没有为这个对象设置上下文时成功 。如果设置了,则会失败,返回状态STATUS_FLT_CONTEXT_ALREADY_DEFINED,新的上下文不会替代旧的上下文 。如果旧的上下文不是空non-NULL,它接收到一个指向旧的上下文的指针,当旧的上下文不用时,微过滤驱动需要释放它,通过调用FltReleas 阅读全文
posted @ 2010-12-29 11:42 UnhandleException 阅读(488) 评论(0) 推荐(0) 编辑
摘要: 一旦一个微过滤驱动已经注册了它使用的上下文类型,它能创建一个上下文通过调用FltAllocateContext。这个例程根据上下文类型标准选择正确的上下文定义。例如,我们创建一个上下文实例如下:status=FltAllocateContext(FltObjects-Filter,//驱动FLT_INSTANCE_CONTEXT,//上下文类型CTX_INSTANCE_CONTEXT_SIZE,//上下文大小NonPagedPool,//池子类型&instanceContext);//返回的上下文它的原型如下:NTSTATUSFltAllocateContext(INPFLT_FILTERF 阅读全文
posted @ 2010-12-29 11:00 UnhandleException 阅读(992) 评论(0) 推荐(0) 编辑
摘要: 当一个微过滤驱动调用FltRegisterFilter从它的入口函数,它必须注册每一个要用到的上下文类型。为了注册上下文类型,微过滤驱动创建一个可变长的数组存储 FLT_CONTEXT_REGISTRATION 结构体,并且在FLT_REGISTRATION 结构体里存储一个指向 FLT_CONTEXT_REGISTRATION 结构体的指针 ContextRegistration,微过滤驱动传递FLT_REGISTRATION 结构体的参数给FltRegisterFilter。数组里FLT_CONTEXT_REGISTRATION 结构体的顺序没有关系,但是最后要以{FLT_CONTEXT_ 阅读全文
posted @ 2010-12-29 10:15 UnhandleException 阅读(926) 评论(0) 推荐(0) 编辑
摘要: 上下文是一个结构体,它被微过滤驱动定义并和过滤器管理对象绑定。微过滤驱动能创建并设置上下文为下列对象:(文件)Files (WindowsVista and later only.) (实例)Instances (卷)Volumes (流)Streams (流句柄)Stream handles (file objects) (事务)Transactions (WindowsVista and later only.) 除了卷(Volume)上下文必须被非分页区分配之外,其他既可以被分页区分配也可以被非分页区分配。当上下文绑定的对象被删除时,当微过滤驱动实例从卷中被删除或当微过滤驱动被卸载时,驱 阅读全文
posted @ 2010-12-29 09:02 UnhandleException 阅读(395) 评论(0) 推荐(0) 编辑