zlr1975113
驱动牛犊
驱动牛犊
  • 注册日期2008-04-21
  • 最后登录2013-01-07
  • 粉丝1
  • 关注0
  • 积分11分
  • 威望35点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1814回复:3

NDIS中间层驱动中怎么发报文给本机?

楼主#
更多 发布于:2012-12-23 17:54
我已经有了一个可以过滤出站和入站全部报文的NDIS中间层驱动,现在我需要在这个驱动中发个自己组建的报文给本机的某个端口。我先试了把这个自组报文的源IP、目的IP、源MAC、目的MAC都设置为本机的,TCP端口也相应设置,然后调用NdisSend发送(对PtSendComplete也进行了相应处理),结果这个驱动的过滤接收的函数并没报告收到了这个报文。然后我又试了不经过发送,直接调用NdisMIndicateReceivePacket试图叫上层接收,结果蓝屏。我想请教这两种方案哪个可行?应该怎么做才正确?我确认报文的各种头部都是正确的。至于SEQ和ACK,简单起见,我是用SYN报文做的实验。我是在局域网内。
zhangfresh
驱动牛犊
驱动牛犊
  • 注册日期2008-07-21
  • 最后登录2023-01-09
  • 粉丝1
  • 关注2
  • 积分94分
  • 威望871点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2012-12-24 11:06
用NdisMIndicateReceivePacket比较简单。
如果用NdisSend的话,必须保证那个网卡驱动够回传报文。具体规则我还不清楚,以前有个同事,他在中间层模拟发送一个保证,不希望报文往回传,但它反而会往协议层传。
这是我以前写的一个虚拟网卡驱动,收到writefile信息之后,往协议层传报文,节选代码:
……
  irpStack = IoGetCurrentIrpStackLocation(Irp);
……
    switch (irpStack->MajorFunction)
    {
……
    case IRP_MJ_WRITE:
        Irp->IoStatus.Information = irpStack->Parameters.Write.Length;

        NdisMEthIndicateReceive
          (aAdapter->AdapterHandle,
           (NDIS_HANDLE) aAdapter,
           (PCHAR) Irp->AssociatedIrp.SystemBuffer,
           ETH_HEADER_SIZE,
           (PCHAR) Irp->AssociatedIrp.SystemBuffer + ETH_HEADER_SIZE,
           irpStack->Parameters.Write.Length - ETH_HEADER_SIZE,
           irpStack->Parameters.Write.Length - ETH_HEADER_SIZE);
                    
        NdisMEthIndicateReceiveComplete (aAdapter->AdapterHandle);

        Irp->IoStatus.Status = status = STATUS_SUCCESS;

        IoCompleteRequest (Irp, IO_NO_INCREMENT);
        return status;
……
zlr1975113
驱动牛犊
驱动牛犊
  • 注册日期2008-04-21
  • 最后登录2013-01-07
  • 粉丝1
  • 关注0
  • 积分11分
  • 威望35点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2012-12-25 12:10
回 zhangfresh 的帖子
zhangfresh:用NdisMIndicateReceivePacket比较简单。
如果用NdisSend的话,必须保证那个网卡驱动够回传报文。具体规则我还不清楚,以前有个同事,他在中间层模拟发送一个保证,不希望报文往回传,但它反而会往协议层传。
这是我以前写的一个虚拟网卡驱动,收到writefile信息之后,往协议层传 .. (2012-12-24 11:06)

谢谢!
iihacker
论坛版主
论坛版主
  • 注册日期2010-01-07
  • 最后登录2017-08-16
  • 粉丝5
  • 关注8
  • 积分377分
  • 威望1941点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2012-12-30 15:55
1  ndissend
2  indicate方法。
NDIS 1群74755180 NDIS 2群182802097 交换机软硬件技术群 187471475 FPGA PCI PCIE 群187471817
游客

返回顶部