概述
最近再接触开源网络驱动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
最后
以上就是冷艳啤酒为你收集整理的Tdifw 移植到win7的全部内容,希望文章能够帮你解决Tdifw 移植到win7所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复