阅读:3429回复:3
请大侠们指导一个关于TDI FILTER的问题
我想写一TDI FILTER DRIVER 来实现个人防火墙.当外面的连接来到我的PC时,FILTER DRIVER的ClinetEventConnect Handler会被触发,正常的流程是 从TDI FILTER的 ClinetEventConnectHandler去调用TDI CLIENT的 ClientEvnetConnectHandler,从而取得一个TDI_ACCEPT的IRP,然后返回,连接就会建立.
我的问题是:当对方的连接请求进来后,不要急于返回TDI_ACCEPT, 而是提供一个让USER选择的机会,决定是否容许建立连接.容许之后才让这个连接建立起来,否则,拒绝连接. PCAUSA的老大Thomas说这是不可能的,因为ClinetEventConnect Handler是工作在DISPATCH LEVEL. 真不可能的话,有没有别的方法实现我的要求? 先谢啦. |
|
沙发#
发布于:2004-01-31 03:42
我又试图在TDI_ACCEPT Request的CompletionRoutine中暂停,但也不行,因为CompletionRoutine是工作在<=DISPATCH_LEVEL. TDI_RECIEVE IRP的CompletionRoutine也是工作在<=DISPATCH_LEVEL,也停不住. 唉,只能眼睁睁地看着别人的连接建立,并向本机发包.
请大侠指点一二. 再谢! |
|
板凳#
发布于:2004-02-02 19:30
我想写一TDI FILTER DRIVER 来实现个人防火墙.当外面的连接来到我的PC时,FILTER DRIVER的ClinetEventConnect Handler会被触发,正常的流程是 从TDI FILTER的 ClinetEventConnectHandler去调用TDI CLIENT的 ClientEvnetConnectHandler,从而取得一个TDI_ACCEPT的IRP,然后返回,连接就会建立. 对于老大的话不能不信也不能全信。 在TDI里要阻断任何过程,都取决于IRP是否能被PENDING。显然ClientEventConnectHandle是可以被阻断的,当进来该例程,首先你回调上层ClientEventConnectHandle,得到一个ACCEPT的IRP包,首先勾挂这个TDI_ACCEPT,等下层完成这个IRP包后,像处理tdi_connect一下样去PENDING这个ACCEPT包进行了. |
|
|
地板#
发布于:2004-03-12 13:21
[/quote] 对于老大的话不能不信也不能全信。 在TDI里要阻断任何过程,都取决于IRP是否能被PENDING。显然ClientEventConnectHandle是可以被阻断的,当进来该例程,首先你回调上层ClientEventConnectHandle,得到一个ACCEPT的IRP包,首先勾挂这个TDI_ACCEPT,等下层完成这个IRP包后,像处理tdi_connect一下样去PENDING这个ACCEPT包进行了. [/quote] PCAUSA的老大的话不能全信, 驱坛老大的话一定要信!!! 在gjpland的指引下, 我在TDI FILTER 中阻截了任何想阻截的IRP. 再问一下: 在TDI层,怎样枚举到活动的端口? 例如处于监听状态的端口. |
|