Tdifw 移植到win7

最近再接触开源网络驱动Tdifw,要把它移植到win7上。网上有很多说法,大部分说win7完全支持Tdi,少部分说不支持。

比较有说服力的一种说法是,win7为兼容Tdi,新增加了Tdx驱动。afd如果发现有TDI 过滤驱动,则按照TDI方式传递IRP,否则,直接将IRP传递给Tcpip.sys。

不管怎么说,Tdifw直接放在win7上是跑不了的。

需要做以下改变:

1.在Disp_Obj.c文件中的tdi_create_addrobj_complete函数里,在询问IP地址和端口号时返回的是PENDING ( WindosXP下返回的是SUCCESS ),也就是

TdiBuildQueryInformation(query_irp, devobj, irps->FileObject,
tdi_create_addrobj_complete2, ctx,
TDI_QUERY_ADDRESS_INFO, mdl);

status = IoCallDriver(devobj, query_irp);

这里的status 是PENDING。

所以需要做如下改动:

if (Irp->IoStatus.Status!= STATUS_SUCCESS) { //wdf
// tdi_create failed - remove fileobj from hash
ot_del_fileobj(irps->FileObject, NULL);
}

2.在Ev_revc.c文件中的tdi_event_receive函数里,

PIO_STACK_LOCATION irps = IoGetCurrentIrpStackLocation(*IoRequestPacket);

这里的irps有可能为NULL,导致下面语句调用iprs指针出错,在windowsXP下IoRequestPacket为NULL,所以执行不到这句话。

所以 注释掉这个if块:  /*          if (*IoRequestPacket != NULL) {.......}         */


本人刚刚接触网络驱动,一些问题还是不太清楚,不能很好的解释这些问题,如果你有更好的办法,或者有更好的想法,或者更好的解释,希望一起探讨!


【程序员的梦想】:http://jq.qq.com/?_wv=1027&k=LgFkAp

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值