dshadow79
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2006-04-10
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
阅读:1710回复:8

中间层驱动怎么跟应用程序交互?

楼主#
更多 发布于:2002-10-04 20:45
我试图IoCreateDevice建个专门用于控制的设备,可是驱动总是在卸载的时候死机。哪位大侠有过这方面的经验?谢谢

最新喜欢:

girlscoutgirlsc...
basalloy
驱动牛犊
驱动牛犊
  • 注册日期2002-03-20
  • 最后登录2006-01-09
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2002-10-04 21:17
如果是NDIS中间层的驱动的话,DDK建议最好使用注册设备接口的方法,好像是REGISERDEVICEINTERFACE(),这样就可以被其他的驱动所调用,其实本站里就有一个PASSTHROU里注册设备的SOURCE CODE,你可以找一找。
但用IOCREATEDEVICE()的方法我觉得也可以,是不是一些标志为没有设置?譬如说IO方式?
dshadow79
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2006-04-10
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-10-04 21:23
我就是不知道怎么设置才来问的啊,大哥给个详细说明吧
我只是在DriverEntry里,用IoCreateDevice建了一个设备,其他的什么也没做。然后卸载驱动的时候就死机,十多次了。
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
地板#
发布于:2002-10-04 21:39
如果是NDIS中间层的驱动的话,DDK建议最好使用注册设备接口的方法,好像是REGISERDEVICEINTERFACE(),这样就可以被其他的驱动所调用,其实本站里就有一个PASSTHROU里注册设备的SOURCE CODE,你可以找一找。
但用IOCREATEDEVICE()的方法我觉得也可以,是不是一些标志为没有设置?譬如说IO方式?


用iocreatedevice是可以。
以前我就是这么干的,除了unload的时候需要reboot之外
没有什么问题。

当时我没有用到什么特别的地方,因为那个时候我没有注意到
需要用registerdevice。我没有多想就调用iocreatedevice。
不再回忆从前,我已经生活在幸福当中。
dshadow79
驱动牛犊
驱动牛犊
  • 注册日期2002-09-29
  • 最后登录2006-04-10
  • 粉丝0
  • 关注0
  • 积分20分
  • 威望2点
  • 贡献值0点
  • 好评度2点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2002-10-04 21:59
用iocreatedevice是可以。
以前我就是这么干的,除了unload的时候需要reboot之外
没有什么问题。

当时我没有用到什么特别的地方,因为那个时候我没有注意到
需要用registerdevice。我没有多想就调用iocreatedevice。


对啊,我就是在卸载驱动的时候死机重起。怎么解决啊?
wirelessboy
驱动牛犊
驱动牛犊
  • 注册日期2002-04-21
  • 最后登录2003-12-17
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2002-10-05 11:54
我试图IoCreateDevice建个专门用于控制的设备,可是驱动总是在卸载的时候死机。哪位大侠有过这方面的经验?谢谢
 


可以看看XP的passthru,觉得里面的东东改装一下就可以用了,我就是这么干的。
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2002-10-05 17:04
呵呵!XP的PASSTHRU里面有一个函数2K好象是不支持的啊!还有就是,如果在PASSTHRU的driverentry里面使用iocreatedevice好象是有问题的啊!并且卸载好象也不是那样卸载的啊!
HuYuguang
论坛版主
论坛版主
  • 注册日期2001-04-25
  • 最后登录2013-04-29
  • 粉丝3
  • 关注1
  • 积分92分
  • 威望11点
  • 贡献值0点
  • 好评度9点
  • 原创分1分
  • 专家分0分
7楼#
发布于:2002-10-05 19:12
呵呵!XP的PASSTHRU里面有一个函数2K好象是不支持的啊!还有就是,如果在PASSTHRU的driverentry里面使用iocreatedevice好象是有问题的啊!并且卸载好象也不是那样卸载的啊!



前面那哥们死机是他的代码的问题,和ioCreateDevice无关。

我以前这么用过,除了unload并不真正卸出内存之外,并没有
其他的问题。

passthru的driverentry里面可以用iocreatedevie。


关于passthru for xp在2k下的使用,需要注意如下问题:

1、注意看source,用正确的预定义
2、如果只需要在2k sp2以上安装就无所谓,2k不支持copyinf,
但是也不要使用2k的passthru的inf,虽然是可以装,但是有bug,
这是系统的bug,sdk里面的一个oemxxxx函数在search inf的
时候有问题,但是passthru for 2k的完全sample没有这个问题,
因为那个dll解决了这个问题,但是inf文件中的关于如何不使用
notify dll的说法是错误的。



关于passthru for xp在9x下的使用,需要注意如下问题:

1、注意那些9x不支持的函数,那个sample好像没有注释彻底。
2、注意unicode的问题,但是大多数情况下你并不需要考虑,
需要考虑的地方好像就只有一个,似乎在bindadapter。
3、你不可能用这段代码支持拨号网卡,你也许能够绑定,
但是你拨号不会成功。你需要把自己伪装成为ip协议,而不是
passthru协议(你需要在给pppmac发setinformation)。
4、你需要学习16 bit dll,以便写一个安装dll,那是一个
艰苦的工作,MS已经不打算支持了,你只有靠自己。



有的时候发现老外写的程序经常有些莫名其妙的BUG,我刚刚
下载了一个CIPE玩玩,就发现那个虚拟网卡的UNLOAD处理有
BUG,IRP无法正确CANCEL,结果我的系统就过了5分钟之后
死机。
不再回忆从前,我已经生活在幸福当中。
guardee
驱动巨牛
驱动巨牛
  • 注册日期2002-11-08
  • 最后登录2010-05-29
  • 粉丝2
  • 关注1
  • 积分2分
  • 威望34点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2002-10-06 01:03
可是我发现在driverentry里面iocreatedevice了设备之后,把irp_mj_xxx的处理函数表替掉了是没有用的!在passthru的binD会被替掉的啊!
游客

返回顶部