x_j_ting
驱动牛犊
驱动牛犊
  • 注册日期2003-03-30
  • 最后登录2005-06-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1989回复:10

TDI的郁闷问题。快死人了。。。。。

楼主#
更多 发布于:2003-10-26 12:05
我想写一个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));
           }
}
x_j_ting
驱动牛犊
驱动牛犊
  • 注册日期2003-03-30
  • 最后登录2005-06-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-10-26 18:03
为什么没有人回答啊,难道你们没有遇到过这样的问题吗?
所有的人都没有遇到这样的问题吗?
唉,为什么做什么事情都这么难,编程是一项没有人性的活动,
编驱动程序简直不是一项活动,而是一种虐待,一种心灵深处的
虐待。
.......................
........................
我在忍受虐待,没有人拯救我吗?
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-10-26 18:29
pTDIRequestKernel=(PTDI_REQUEST_KERNEL )&IrpStack->Parameters;
这句什么意思?

用si跟一下,看是哪句蓝的
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
地板#
发布于:2003-10-27 11:36
你大概是想显示一下当前Connect的目标地址吧?
肯定是指针转换有错误,仔细对照DDK的说明重新写一个吧:)
我第一次写的时候就完全成功,后来代码找不到了,重写了一下,居然兰屏,对了半天才找出来。
x_j_ting
驱动牛犊
驱动牛犊
  • 注册日期2003-03-30
  • 最后登录2005-06-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-10-27 18:52
我仔细对照DDK查了好机编,但是找不出错误来啊,谁能帮我找一找啊。
mobi
驱动牛犊
驱动牛犊
  • 注册日期2002-06-18
  • 最后登录2005-08-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-10-27 18:57
我是新手,解决不了你的问题... :)

如果你会用SoftIce 的话,就用SI 跟踪一下,先找出出
问题的地方...

如果不会用SI 呢,就加DbgPrint 和Return ,多试几次
... 呵呵...

我以前在Linux 下调试驱动就这么干的...

GOOD LUCK
。。。。。。。。。。。。。。。。。
fracker
驱动太牛
驱动太牛
  • 注册日期2001-06-28
  • 最后登录2021-03-30
  • 粉丝0
  • 关注0
  • 积分219分
  • 威望81点
  • 贡献值0点
  • 好评度23点
  • 原创分0分
  • 专家分1分
  • 社区居民
6楼#
发布于:2003-10-28 10:57
我想写一个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;
变成pIPAddress = (PTDI_ADDRESS_IP )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));
           }
}




[编辑 -  10/28/03 by  fracker]
vc_king
驱动牛犊
驱动牛犊
  • 注册日期2002-10-19
  • 最后登录2008-11-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-10-29 13:26
把程序中的DBGPRINT都替换成DbgPrint,DBGPRINT内侧的一对括号也去掉,一切OK,我已经试过,谢谢放分!!!
x_j_ting
驱动牛犊
驱动牛犊
  • 注册日期2003-03-30
  • 最后登录2005-06-10
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2003-11-01 00:38
谢谢你的回答,我按照你的做法已经成功了,为什么去掉内\'(\"就行了呢?而且我的DBGPRINT 是一个红定义:
#define DBGPRINT(fmt)  DbgPrint(fmt)
原因在哪儿啊?
vc_king
驱动牛犊
驱动牛犊
  • 注册日期2002-10-19
  • 最后登录2008-11-01
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-11-01 19:59
就是这个宏出的问题,宏的导入就是一一替换,用了括号替换的就是(。。。)这个东西了,还是个字符串吗?
ghost2002910
驱动牛犊
驱动牛犊
  • 注册日期2004-10-09
  • 最后登录2013-05-21
  • 粉丝0
  • 关注0
  • 积分12分
  • 威望45点
  • 贡献值1点
  • 好评度6点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-07-16 17:55
pTDIRequestKernel=(PTDI_REQUEST_KERNEL )&IrpStack->Parameters;
不对吧?
该是
pTDIRequestKernel=(PTDI_REQUEST_KERNEL )IrpStack->Parameters;
游客

返回顶部