摘要: 微过滤驱动的FilterUnloadCallback 例程必须执行任何需要的全局变量的清除 。下列列表包括全局清除任务的例子,微过滤驱动可能执行 :调用ExDeleteResourceLite 删除全局资源变量,它被实例化通过调用之前的 ExInitializeResourceLite. 调用ExFreePool 或ExFreePoolWithTag 去释放全局内存,它被分配通过调用例程如ExAllocatePoolWithTag. 调用ExDeleteNPagedLookasideList 或ExDeletePagedLookasideList 去删除后备列表,它被分配通过分别调用之前的Ex 阅读全文
posted @ 2011-01-10 16:04 UnhandleException 阅读(318) 评论(0) 推荐(0) 编辑
摘要: 微过滤驱动的FilterUnloadCallback 例程必须调用FltUnregisterFilter 为了取消注册微过滤驱动 。调用FltUnregisterFilter 引起下列事情发生:微过滤驱动回调例程取消注册微过滤驱动实例被卸载 ,为了每个微过滤驱动实例,微过滤驱动的InstanceTeardownStartCallback和 InstanceTeardownCompleteCallback 例程被调用如果微过滤驱动设置任何上下文 在volumes, instances, streams, or stream handles上,这些上下文被删除。如果微过滤驱动已经注册一个Clean 阅读全文
posted @ 2011-01-10 15:54 UnhandleException 阅读(417) 评论(0) 推荐(0) 编辑
摘要: 如果微过滤驱动以前打开过一个内核模式的通信服务端口通过调用FltCreateCommunicationPort,它必须关闭端口通过调用FltCloseCommunicationPort 。为了阻止系统挂起在卸载进程时,微过滤驱动的FilterUnloadCallback 例程必须关闭端口在调用FltUnregisterFilter之前。如果用户模式应用程序有一个开启的连接,连向通信服务端口,对于这个连接任何客户端端口仍然开启的 在FltCloseCommunicationPort 返回以后。然而,过滤管理器将关闭所有客户端口当微过滤驱动被卸载。 阅读全文
posted @ 2011-01-10 15:30 UnhandleException 阅读(350) 评论(0) 推荐(0) 编辑
摘要: FilterUnloadCallback 例程被定义成:typedefNTSTATUS(*PFLT_FILTER_UNLOAD_CALLBACK)(FLT_FILTER_UNLOAD_FLAGSFlags);FilterUnloadCallback 例程有一个输入参数,Flags,它可以是NULL或FLTFL_FILTER_UNLOAD_MANDATORY,FLTFL_FILTER_UNLOAD_MANDATORY指明卸载操作是托管的。一个微过滤驱动的 FilterUnloadCallback 例程必须执行以下步骤:1.关门所有内核模式通信服务端口句柄(kernel-mode communic 阅读全文
posted @ 2011-01-10 14:46 UnhandleException 阅读(332) 评论(0) 推荐(0) 编辑
摘要: 过滤管理器调用一个微过滤驱动的FilterUnloadCallback 例程在卸载微过滤驱动之前通过以下俩个方式之一:非托管的卸载这个类型的卸载发生当一个用户模式的应用程序已经调用FilterUnload或内核模式驱动调用FltUnloadFilter 。它也发生在你在命令行里输入fltmc unload的时候。托管卸载这个类型的卸载发生你在命令行里输入sc stop或 net stop的时候。它也发生在用户模式的应用程序调用Microsoft Win32 ControlService 方法时,传递SERVICE_CONTROL_STOP 作为dwControl 的参数。对于非托管的卸载,如果 阅读全文
posted @ 2011-01-10 14:31 UnhandleException 阅读(409) 评论(0) 推荐(0) 编辑
摘要: 一个文件系统微过滤驱动能可选择的注册一个 PFLT_FILTER_UNLOAD_CALLBACK类型的例程 作为微过滤驱动的 FilterUnloadCallback 例程。这个回调例程也被称为微过滤驱动的卸载例程 。微过滤驱动不需要去注册一个 FilterUnloadCallback 例程。然而 ,我们强烈建议:微过滤驱动注册它的回调例程,因为如果微过滤驱动不注册一个 FilterUnloadCallback 例程,驱动不能被卸载。为了注册这个回调例程,微过滤驱动存储PFLT_FILTER_UNLOAD_CALLBACK类型的例程的地址 ,这个地址在 FLT_REGISTRATION 结构体 阅读全文
posted @ 2011-01-10 14:05 UnhandleException 阅读(518) 评论(0) 推荐(0) 编辑
摘要: 总体结构:Pch.h 包含了所有用到的头文件 ,这也是写驱动的一个技巧 ,用一个头文件包含所有需要的头文件 ,以后的.c 文件只要引用这一个头文件即可 。CtxStruct.h 头文件,定义了所有需要用到的结构体 ,这样如果不是系统自带的结构体 ,找不到的结构体一定在这里 。CtxProc.h 头文件,定义了所有将要实习的方法,在msdn里找不到的方法,原型一定在这里 。Context.c 所有自定义的对上下文操作的方法的实现在这个文件里 。Operations.c 实现FLT_OPERATION_REGISTRATION中各种callback方法 ,主要的功能实现都在这里 。Support. 阅读全文
posted @ 2010-12-29 16:52 UnhandleException 阅读(2373) 评论(0) 推荐(0) 编辑
摘要: 上下文被删除之后,它的未解决的引用被释放之后,上下文被释放。有一个特例:如果上下文已经被创建,但是没有被 设置,它不需要被删除。它被释放当它的引用数量为0时。当一个微过滤驱动注册它的上下文类型,每一个上下文定义包括一个清除的回调函数,这个回调函数被在上下文被释放之前调用。 阅读全文
posted @ 2010-12-29 14:51 UnhandleException 阅读(246) 评论(0) 推荐(0) 编辑
摘要: 每个上下文调用 成功,最后都必须被删除。但是,微过滤驱动自动的删除上下文当上下文绑定的对象被删除,当微过滤驱动实例被卸载或当微过滤驱动从卷中被卸载。因此,对一个微过滤驱动来说,删除上下文不太必要。微过滤驱动能删除上下文通过调用FltDeleteXxxContext,Xxx是上下文类型,也可以调用 FltDeleteContext。一个上下文能被删除,当设置为绑定一个对象时。上下文不能被删除,如果没有被设置,或者它被一个新的上下文成功取代通过调用FltSetXxxContext。在调用FltDeleteXxxContext 时,旧的上下文通过OldContent参数返回,如果它是非空的话。如果O 阅读全文
posted @ 2010-12-29 14:29 UnhandleException 阅读(407) 评论(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 阅读(534) 评论(0) 推荐(0) 编辑