阅读:1328回复:2
各位大虾看这样加个函数能取出发送出去的包吗!
我在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函数中。 各位大虾帮忙看一下这个程序 有问题吗,这样能取到发送的包吗? |
|
沙发#
发布于:2007-09-21 11:08
不如不拷贝到Buffer,直接在循环里面写入共享内存。
|
|
板凳#
发布于:2007-09-21 22:30
谢谢搂主,你说的是直接在发送函数中将packet中的内容倒贝到我自己分配的内存中吗?那样做和这样做的区别是什么啊?
|
|