swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
阅读:2332回复:10

各位大侠帮忙呀,NDISMRegiterDevice的问题!

楼主#
更多 发布于:2001-08-13 16:21
在调用NdisMRegisterDevice的时候,要用到ntddk.h里的一些数据结构和常量,可是当包含ntddk.h和ndis.h且有:#define NDIS_WDM 1
在#include <ndis.h>前面,但编译的时候总是通不过,说我的IRP好象是不合法,哪位大侠遇到过这种情况,请指点一二,3ks!

最新喜欢:

fsbfsb
hustfyb
驱动牛犊
驱动牛犊
  • 注册日期2001-05-28
  • 最后登录2002-01-23
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-08-13 16:45
调用NdisMRegisterDevice的时候
需要编译irp吗
把你的代码和错误信息一起放上来
你的说法太不详细了
再见了白云 永别了黄鹤
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2001-08-14 08:29
在调用NdisMRegisterDevice的时候,不是要传入一个函数数组,而这个数据中的函数一定要定义成这样的形式:
NTSTATUS
PassthruDispatch(
    IN    PDEVICE_OBJECT pDO,
    IN    PIRP pIrp            
    )
虽然在调用NdisMRegisterDevice的时候不用PIRP这个结构,但在函数数组里要用,而这个PIRP结构是在ntddk.h里面定义的,就要包含ntddk.h,但这样compile不过去。我把函数数组写入一个Dispatch.c文件,把函数的声明放在dispatch.h文件里,compile的时候出现这样的错误:
dispatch.h(9) : error C2146: syntax error : missing ')' before identifier 'pIrp'

dispatch.h(9) : error C2081: 'PIRP' : name in formal parameter list illegal
dispatch.h(9) : error C2061: syntax error : identifier 'pIrp'
dispatch.h(9) : error C2059: syntax error : ';'
dispatch.h(10) : error C2059: syntax error : ')'
passthru.c(47) : error C2061: syntax error : identifier 'pirp'
passthru.c(47) : error C2059: syntax error : ';'
但程序里并不缺少这些符号,不知道怎么回事,请大侠指点!!!
wlw
wlw
驱动牛犊
驱动牛犊
  • 注册日期2001-05-15
  • 最后登录
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-08-14 10:41
你做的要点是对的,还出现这个错误不是#include的问题,而是#define NDIS_WDM 1的问题,你试着将这个定义加到其他文件中(这个文件可能并没有PIRP的任何痕迹)。因为我无法知道你的文件结构,所以也就没有办法知道你到底应该加到哪个文件中了
hwang
Dino
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2007-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2001-08-14 10:53
你可以试试在她的Source文件中的C_DEFINES=$(C_DEFINES) -DNDIS40 -DNDIS_MINIPORT_DRIVER -DNDIS40_MINIPORT一行的后面加上-DBINARY_COMPATIBLE=0,我是这样试成功的。
Death is only the beginning
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-08-14 12:31
谢谢各位,我已经compile过了,是在precomp.h里加的那句#define
可是还有问题,compile过后,加载服务,可在加载的时候,突然就篮屏了,我在“白”上好象有人说NdisMRegisterDevice与什么冲突,哪位大侠知道,怎么回事?谢谢乐!:)
baijbup
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2001-08-14 15:55
我现在也是遇见这个问题,现在可以判断的是
ndismregisterdevice和NdisIMRegisterLayeredMiniport
之间的问题,如果在程序中现运行ndismregisterdevice,那么
可以成功,但是,当运行到NdisIMRegisterLayeredMiniport
时就失败了。如果程序中把NdisIMRegisterLayeredMiniport放在
ndismregisterdevice,那么NdisIMRegisterLayeredMiniport
可以成功,但是ndismregisterdevice失败
************************ 寻找快乐的人 ************************
swift
驱动中牛
驱动中牛
  • 注册日期2001-07-26
  • 最后登录2007-05-09
  • 粉丝0
  • 关注0
  • 积分70分
  • 威望7点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2001-08-14 16:11
上面那个问题,已经解决了,可能是我的收发程序有问题,具体的原因我没找到。我找了一个干净的passthru,把irp的dispatch处理加进去,然后运行就没事!现在可以与用户态交互了,谢谢各位帮忙 。
我还有一个问题,DriverObject->MajorFunction如果所有的都清空,只为处理一些ioctl,为什么系统的网络起不来!3ks!
Dino
驱动牛犊
驱动牛犊
  • 注册日期2001-08-07
  • 最后登录2007-01-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2001-08-14 16:18
说一说你是怎样解决的嘛!大家也好学习一下。
Death is only the beginning
baijbup
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2001-08-14 16:30
是呀,能不能把你的驱动程序给我一份,或者
给我driverEntry()函数,我的e_mail是:
baijbupt@263.net.
谢谢
另外,你的win32程序中的createfile函数时
怎么写的呢?能不能一并告知?
************************ 寻找快乐的人 ************************
baijbup
驱动牛犊
驱动牛犊
  • 注册日期2001-08-03
  • 最后登录2003-05-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2001-08-14 17:15
不用了,谢谢,我也已经调出来了。
如果有人想要源代码的话,请看我发的另一片贴子:
《安装passthru。sys提示没有数字签名》。
祝大家天天向上!
************************ 寻找快乐的人 ************************
游客

返回顶部