我是靠谱客的博主 冷艳啤酒,这篇文章主要介绍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

最后

以上就是冷艳啤酒最近收集整理的关于Tdifw 移植到win7的全部内容,更多相关Tdifw内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(120)

评论列表共有 0 条评论

立即
投稿
返回
顶部