阅读:1531回复:8
NDIS_PACKET的问题
我想把一个网卡发送的帧放到一个UCHAR数组中, 该怎么办啊?
NDIS_PACKET的结构中怎么得到相应的帧的字节数组啊 还有NDIS_PAKCET的缓冲区是什么意思, 怎么还不只一个啊????? 等待ing !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ![]() |
|
沙发#
发布于:2005-06-28 16:23
看ndisuio的代码,send,receive函数,包括了你关心的东东
|
|
板凳#
发布于:2005-06-28 17:14
下面是引用zhaock于2005-06-28 16:23发表的: 能给我一份 ndisuio 的代码吗?好像我的 DDK中没有 |
|
地板#
发布于:2005-06-28 17:16
|
|
地下室#
发布于:2005-06-28 17:22
xp ddk就有,更新的xp ddk里面的ndisprot,基本是同一个东东,你不会只有2k ddk吧?
|
|
5楼#
发布于:2005-06-29 21:08
版主能大体讲一下么, 我看代码有点看不懂?
谢谢! |
|
6楼#
发布于:2005-06-29 22:00
看下面的代码,摘自ndisuio,一个NDIS_PACKET上可能有多个NDIS_BUFFER,形成一个链表,第一个pNdisBuffer = pRcvPacket->Private.Head;后面的通过NdisGetNextBuffer(pNdisBuffer, &pNdisBuffer);依次获得
NDIS_BUFFER实际上就是MDL,具体数据可以通过NdisQueryBufferSafe(pNdisBuffer, &pSrc, &BytesAvailable, NormalPagePriority);pSrc指向数据,BytesAvailable是数据长度. 很简单 pNdisBuffer = pRcvPacket->Private.Head; while (BytesRemaining && (pNdisBuffer != NULL)) { #ifndef WIN9X NdisQueryBufferSafe(pNdisBuffer, &pSrc, &BytesAvailable, NormalPagePriority); if (pSrc == NULL) { DEBUGP(DL_FATAL, ("ServiceReads: Open %p, QueryBuffer failed for buffer %p\n", pOpenContext, pNdisBuffer)); break; } #else NdisQueryBuffer(pNdisBuffer, &pSrc, &BytesAvailable); #endif if (BytesAvailable) { ULONG BytesToCopy = MIN(BytesAvailable, BytesRemaining); NUIO_COPY_MEM(pDst, pSrc, BytesToCopy); BytesRemaining -= BytesToCopy; pDst += BytesToCopy; } NdisGetNextBuffer(pNdisBuffer, &pNdisBuffer); } |
|
7楼#
发布于:2005-06-29 22:25
太感谢了!!!!!!
高人啊!!!! |
|
8楼#
发布于:2005-06-29 22:59
呵呵,都是入门级问题
|
|