阅读:1989回复:10
TDI的郁闷问题。快死人了。。。。。
我想写一个TDI的TCPFilter,我在处理TDI_CONNECT 时候加了这么几句话,每次运行都重起或者蓝屏。真是受不了,希望大家帮帮忙。
PacketDispatch( IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp ) { PIO_STACK_LOCATION IrpStack; PTDI_REQUEST_KERNEL pTDIRequestKernel; PTRANSPORT_ADDRESS pTransAddr; PTDI_ADDRESS_IP pIPAddress; PUCHAR pByte; IrpStack = IoGetCurrentIrpStackLocation(Irp); switch(IrpStack->MajorFunction) { case ....: break; ...... case IRP_MJ_INTERNAL_DEVICE_CONTROL: switch (IrpStack->MinorFunction) { case TDI_CONNECT: pTDIRequestKernel=(PTDI_REQUEST_KERNEL )&IrpStack->Parameters; pTransAddr=pTDIRequestKernel->RequestConnectionInformation)->RemoteAddress); DBGPRINT(( \"TAAddressCount: %d\",pTransAddr->TAAddressCount )); DBGPRINT(( \"AddressLength: %d\",pTransAddr->Address[ 0 ].AddressLength )); DBGPRINT(( \"AddressType: %d\",pTransAddr->Address[ 0 ].AddressType )); if(pTransAddr->Address[0 ].AddressType==TDI_ADDRESS_TYPE_IP) { pIPAddress = (PTDI_ADDRESS_IP )(PUCHAR )&pTransAddr->Address[0 ].Address; pByte = (PUCHAR )&pIPAddress>in_addr; DBGPRINT(( \"in_addr: %d.%d.d.%d\",pByte[ 0 ], pByte[ 1 ], pByte[ 2 ], pByte[ 3 ] )); DBGPRINT(( \"sin_port: %d \",pIPAddress->sin_port)); } } |
|
沙发#
发布于:2003-10-26 18:03
为什么没有人回答啊,难道你们没有遇到过这样的问题吗?
所有的人都没有遇到这样的问题吗? 唉,为什么做什么事情都这么难,编程是一项没有人性的活动, 编驱动程序简直不是一项活动,而是一种虐待,一种心灵深处的 虐待。 ....................... ........................ 我在忍受虐待,没有人拯救我吗? |
|
板凳#
发布于:2003-10-26 18:29
pTDIRequestKernel=(PTDI_REQUEST_KERNEL )&IrpStack->Parameters;
这句什么意思? 用si跟一下,看是哪句蓝的 |
|
地板#
发布于:2003-10-27 11:36
你大概是想显示一下当前Connect的目标地址吧?
肯定是指针转换有错误,仔细对照DDK的说明重新写一个吧:) 我第一次写的时候就完全成功,后来代码找不到了,重写了一下,居然兰屏,对了半天才找出来。 |
|
地下室#
发布于:2003-10-27 18:52
我仔细对照DDK查了好机编,但是找不出错误来啊,谁能帮我找一找啊。
|
|
5楼#
发布于:2003-10-27 18:57
我是新手,解决不了你的问题... :)
如果你会用SoftIce 的话,就用SI 跟踪一下,先找出出 问题的地方... 如果不会用SI 呢,就加DbgPrint 和Return ,多试几次 ... 呵呵... 我以前在Linux 下调试驱动就这么干的... GOOD LUCK |
|
|
6楼#
发布于:2003-10-28 10:57
我想写一个TDI的TCPFilter,我在处理TDI_CONNECT 时候加了这么几句话,每次运行都重起或者蓝屏。真是受不了,希望大家帮帮忙。 [编辑 - 10/28/03 by fracker] |
|
7楼#
发布于:2003-10-29 13:26
把程序中的DBGPRINT都替换成DbgPrint,DBGPRINT内侧的一对括号也去掉,一切OK,我已经试过,谢谢放分!!!
|
|
8楼#
发布于:2003-11-01 00:38
谢谢你的回答,我按照你的做法已经成功了,为什么去掉内\'(\"就行了呢?而且我的DBGPRINT 是一个红定义:
#define DBGPRINT(fmt) DbgPrint(fmt) 原因在哪儿啊? |
|
9楼#
发布于:2003-11-01 19:59
就是这个宏出的问题,宏的导入就是一一替换,用了括号替换的就是(。。。)这个东西了,还是个字符串吗?
|
|
10楼#
发布于:2005-07-16 17:55
pTDIRequestKernel=(PTDI_REQUEST_KERNEL )&IrpStack->Parameters;
不对吧? 该是 pTDIRequestKernel=(PTDI_REQUEST_KERNEL )IrpStack->Parameters; |
|