我是靠谱客的博主 冷艳啤酒,最近开发中收集的这篇文章主要介绍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 移植到win7所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部