Tdifw 移植到win7

来源:互联网 发布:战舰世界mac 国服切换 编辑:程序博客网 时间:2024/06/06 09:27

最近再接触开源网络驱动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

0 0
原创粉丝点击