qsc66886688
驱动牛犊
驱动牛犊
  • 注册日期2007-07-02
  • 最后登录2008-06-06
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望43点
  • 贡献值0点
  • 好评度42点
  • 原创分0分
  • 专家分0分
阅读:1328回复:2

各位大虾看这样加个函数能取出发送出去的包吗!

楼主#
更多 发布于:2007-09-20 20:05
我在passthru的minipor.c中加了这个函数,各位大虾看能这样取出包来吗?
void CopyPacket2Buffer(IN PNDIS_PACKET pPacket)
{
    NDIS_STATUS        Status;
    PNDIS_BUFFER BuffDT;
    PUCHAR BuffVA;
    UINT BuffLen;
                     PUCHAR mycontent;
    UINT pLength=0;
    BuffLen=0;
    
    Status =NdisAllocateMemory(&mycontent, 2000, 0, HighestAcceptableMax);
  
    
    NdisQueryPacket(pPacket,NULL,NULL,&BuffDT,NULL);

    while(BuffDT!=(PNDIS_BUFFER)NULL)
    {
        NdisQueryBuffer(BuffDT,&BuffVA,&BuffLen);
        NdisMoveMemory((PUCHAR)mycontent,BuffVA,BuffLen);
        mycontent=mycontent+BuffLen;
        pLength+=BuffLen;
        NdisGetNextBuffer(BuffDT,&BuffDT);
    }
    my_send((char *)mycontent,pLength);
    NdisFreeMemory(mycontent,2000,0);
    return;
}
这个函数是将带发送的数据包中的内容拷贝到mycontent中来。
在这个函数中我调用了my_send函数,如下:
extern LONG        KeReadStateEvent(IN PRKEVENT Event);
extern PVOID    gpEventObject;            // 与应用通信的事件对象
extern PVOID    SystemVirtualAddress;    // 共享内存地址


void my_send(char *sendpacket,UINT plength)
{
    if(!KeReadStateEvent(gpEventObject))
    {
    // 复制数据到共享内存
    
    memset(SystemVirtualAddress, 0, 2000);
    memcpy(SystemVirtualAddress, sendpacket, 2000);
                      KeSetEvent(gpEventObject, 0, FALSE);
        
                     }
    else{}

}此函数将数据包的内容送到共享内存中送到应用程序。
然后在MPSend,MPSendPackets函数中
NdisSend(&Status,
                   pAdapt->BindingHandle,
     MyPacket);
函数前加上CopyPacket2Buffe(MyPacket),将数据包送到CopyPacket2Buffe函数中。
各位大虾帮忙看一下这个程序 有问题吗,这样能取到发送的包吗?
wnl0008
驱动牛犊
驱动牛犊
  • 注册日期2007-06-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-21 11:08
不如不拷贝到Buffer,直接在循环里面写入共享内存。
qsc66886688
驱动牛犊
驱动牛犊
  • 注册日期2007-07-02
  • 最后登录2008-06-06
  • 粉丝0
  • 关注0
  • 积分320分
  • 威望43点
  • 贡献值0点
  • 好评度42点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-21 22:30
谢谢搂主,你说的是直接在发送函数中将packet中的内容倒贝到我自己分配的内存中吗?那样做和这样做的区别是什么啊?
游客

返回顶部