wengyu100
驱动牛犊
驱动牛犊
  • 注册日期2003-10-10
  • 最后登录2006-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1607回复:7

如何通过win32应用程序来改变过虑条件?

楼主#
更多 发布于:2003-12-30 22:06
改装passthru做了一个包过虑的东西
想通过win32应用程序来改变过虑条件
听说是利用IRP
但不知道具体用哪个IRP
以及怎么传递参数

哪位大侠能够不吝惜笔墨详细说说?
分不够尽管开口
yongliliu
驱动小牛
驱动小牛
  • 注册日期2003-10-20
  • 最后登录2007-09-28
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-12-31 09:26
1、首先你必须在你的驱动里面进行包的协议分析
2、注册NdisMRegisterDevice和DispatchTable函数表,以便响应上层应用的IOCTL,并进行相应的协议分析处理
3、在上层应用里面传自定义的IOCTL给你的驱动
成功不是天上掉下来的免费的丰盛的晚餐!
wengyu100
驱动牛犊
驱动牛犊
  • 注册日期2003-10-10
  • 最后登录2006-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-12-31 10:46
yongliliu大侠
多谢你回答我的问题
你说的1。2。我都已经搞定了

我想问的就是第3点
你能不能详细说说
最好能给个框架
谢谢
cloudycro
驱动牛犊
驱动牛犊
  • 注册日期2003-12-02
  • 最后登录2006-02-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于: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]
wengyu100
驱动牛犊
驱动牛犊
  • 注册日期2003-10-10
  • 最后登录2006-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-12-31 11:46
可能我自己说的也不详细
我仔细说说:
定义一个IP变量IPadr=×××。×××。×××。×××
在ptreceive中受到数据包时,我对包进行解析
当该包的IP地址==IPadr,就把包传给协议层
否则释放改包

我现在想知道通过win32应用程序能否改变
中间层驱动的变量IPadr的值?
这种方法来实现过滤条件的改变不知是否可行?
wengyu100
驱动牛犊
驱动牛犊
  • 注册日期2003-10-10
  • 最后登录2006-10-21
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-12-31 11:50
可能我自己说的也不详细
我仔细说说:
在中间层定义一个IP变量IPadr=×××。×××。×××。×××
在ptreceive中受到数据包时,我对包进行解析
当该包的IP地址==IPadr,就把包传给协议层
否则释放改包

我现在想知道通过win32应用程序能否改变
中间层驱动的变量IPadr的值?
这种方法来实现过滤条件的改变不知是否可行?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2003-12-31 12:12
可以啊,他们不是说了嘛,但是你还必须在IM中CREATE一个设备出来,才能接受上层来的控制命令,可以这样:
在MINIPORTINITIALIZE里面调用你的创建设备的代码,实际上最终是用NdisMRegisterDevice创建出一个设备,这样,你可以定义这个设备的分派例程(说通俗一点儿就是服务例程吧),这个服务例程用于上层用DEVICEIOCONTROL的时候处理发下来的IRP,这样,你在IRP里面把你要改的策略发下来,下面接收到以后就可以根据你的需要改了
根据地的兄弟们,团结就是力量
yongliliu
驱动小牛
驱动小牛
  • 注册日期2003-10-20
  • 最后登录2007-09-28
  • 粉丝0
  • 关注0
  • 积分11分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-01-07 16:32
其实这里面还有的技术问题就是共享内存
1、如果是驱动层分配的共享内存是物理内存的话,就要用虚拟地址进行映射之后才能反给应用层进行引用处理,因为应用层一般不能直接访问物理内存。(其实也可以直接访问)
2、如果是应用层分配内存的话,只要把指针传递给驱动层就可以直接操作引用了

不过第2种方式我也是只说不练;),其实最好是通过IRP直接修改驱动层的内存,然后在驱动层直接使用共享内存创建协议分析表不是更好吗?各位!
成功不是天上掉下来的免费的丰盛的晚餐!
游客

返回顶部