首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拆分NDIS_BUFFER (WDK)

拆分NDIS_BUFFER (WDK)
EN

Stack Overflow用户
提问于 2012-05-01 22:25:17
回答 1查看 256关注 0票数 0

我是驱动程序编程的新手,我找不到一个可能很简单的问题的解决方案。我正在编辑来自wdk示例的ndis_prot示例驱动程序。目前,数据包以Irp的形式到达驱动程序中,并存储在pNdisBuffer中。我需要将缓冲区分成两部分-- pNdisBuffer1和pNdisBuffer2 --第一部分填充头部,第二部分填充数据,并将它们都链接到pNdisPacket。关于这方面的文章很少,但我找不到这样的例子。就像这里描述的那样,这应该是可能的

http://blogs.msdn.com/b/ntdebugging/archive/2008/09/19/ndis-part-1.aspx

但我希望看到wdk (代码)的例子。

附言:请不要问我为什么需要这样做,也不要试图将它改变成不同的东西。它只是必须这样做。你能帮帮我吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-02 08:00:51

伪代码(错误处理&省略了一些声明等)

代码语言:javascript
复制
// initial code
PNDIS_PACKET sourcePack;
...
PNDIS_PACKET packet1, packet2, current;
NdisAllocatePacket(&status, &packet1, handle);
NdisAllocatePacket(&status, &packet2, handle);
current = packet1;
PNDIS_BUFFER sourceBuf, newBuf;
NdisGetFirstBufferFromPacket(sourcePack,&sourceBuf,&va,&len,&totalLen);
while(sourceBuf != NULL)
{
  NdisQueryBuffer(sourceBuf,&va,&len);
  if( .. (PUCHAR)va+x is a split point ..)
  {
    if(x != 0)
    {
      newBuf = NewBuf(va, x);
      NdisCahinBufferAtBack(current,newBuf);
    }
    current = packet2;
    newBuf = NewBuf(va+x, len-x);
  }
  else
  {
    newBuf = NewBuf(va,len);
  }
  NdisChainBufferAtBack(current,newBuf);
  NdisGetNextBuffer(sourceBuf,&sourceBuf);
}
...
PNDIS_BUFFER NewBuf(PVOID va, ULONG len)
{
  PNDIS_BUFFER newBuffer;
  NdisAllocateBuffer(&Status, &newBuffer, handle, va, len);
  return newBuffer;
}

// response to comment
newBuf = NewBuf(va, x);
NdisCahinBufferAtBack(current,newBuf);
newBuf = NewBuf(va+x, len-x);
NdisCahinBufferAtBack(current,newBuf);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10399099

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档