阅读:1607回复:7
如何通过win32应用程序来改变过虑条件?
改装passthru做了一个包过虑的东西
想通过win32应用程序来改变过虑条件 听说是利用IRP 但不知道具体用哪个IRP 以及怎么传递参数 哪位大侠能够不吝惜笔墨详细说说? 分不够尽管开口 |
|
沙发#
发布于:2003-12-31 09:26
1、首先你必须在你的驱动里面进行包的协议分析
2、注册NdisMRegisterDevice和DispatchTable函数表,以便响应上层应用的IOCTL,并进行相应的协议分析处理 3、在上层应用里面传自定义的IOCTL给你的驱动 |
|
|
板凳#
发布于:2003-12-31 10:46
yongliliu大侠
多谢你回答我的问题 你说的1。2。我都已经搞定了 我想问的就是第3点 你能不能详细说说 最好能给个框架 谢谢 |
|
地板#
发布于:2003-12-31 11:07
bRc=DeviceIoControl(hdevice,(DWORD)IOCTL_SET_FILTERLIST,pFilterList,
sizeof(FILTERLIST)+(pFilterList->AddressCount*sizeof(ULONG)), NULL,0,&bytesReturned,NULL); pFilterList是指向你的过滤表的指针。 在驱动里面处理IOCTL_SET_FILTERLIST这个IRP就可以了。 :D [编辑 - 12/31/03 by cloudycro] [编辑 - 12/31/03 by cloudycro] |
|
地下室#
发布于:2003-12-31 11:46
可能我自己说的也不详细
我仔细说说: 定义一个IP变量IPadr=×××。×××。×××。××× 在ptreceive中受到数据包时,我对包进行解析 当该包的IP地址==IPadr,就把包传给协议层 否则释放改包 我现在想知道通过win32应用程序能否改变 中间层驱动的变量IPadr的值? 这种方法来实现过滤条件的改变不知是否可行? |
|
5楼#
发布于:2003-12-31 11:50
可能我自己说的也不详细
我仔细说说: 在中间层定义一个IP变量IPadr=×××。×××。×××。××× 在ptreceive中受到数据包时,我对包进行解析 当该包的IP地址==IPadr,就把包传给协议层 否则释放改包 我现在想知道通过win32应用程序能否改变 中间层驱动的变量IPadr的值? 这种方法来实现过滤条件的改变不知是否可行? |
|
论坛版主
|
6楼#
发布于:2003-12-31 12:12
可以啊,他们不是说了嘛,但是你还必须在IM中CREATE一个设备出来,才能接受上层来的控制命令,可以这样:
在MINIPORTINITIALIZE里面调用你的创建设备的代码,实际上最终是用NdisMRegisterDevice创建出一个设备,这样,你可以定义这个设备的分派例程(说通俗一点儿就是服务例程吧),这个服务例程用于上层用DEVICEIOCONTROL的时候处理发下来的IRP,这样,你在IRP里面把你要改的策略发下来,下面接收到以后就可以根据你的需要改了 |
|
7楼#
发布于:2004-01-07 16:32
其实这里面还有的技术问题就是共享内存
1、如果是驱动层分配的共享内存是物理内存的话,就要用虚拟地址进行映射之后才能反给应用层进行引用处理,因为应用层一般不能直接访问物理内存。(其实也可以直接访问) 2、如果是应用层分配内存的话,只要把指针传递给驱动层就可以直接操作引用了 不过第2种方式我也是只说不练;),其实最好是通过IRP直接修改驱动层的内存,然后在驱动层直接使用共享内存创建协议分析表不是更好吗?各位! |
|
|