anylin
驱动牛犊
驱动牛犊
  • 注册日期2005-06-07
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望45点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
阅读:1518回复:4

重谢――KNdisPacket

楼主#
更多 发布于:2005-06-29 21:30
  怎么把KNdisPacket对应的数据内容放到一个UCHAR数组中?
怎么把一个UCHAR数组构造程一个KNdisPacket?

最新喜欢:

hxqw2000hxqw20...
noproblem
驱动牛犊
驱动牛犊
  • 注册日期2002-07-24
  • 最后登录2005-12-14
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-07-01 09:07
DriverStudio network framework中有现成的例子,我摘录最主要的一段:

// KNdisBufferPool m_BufferPool;
// KNdisPacketPool m_PacketPool;

// in initialization
m_BufferPool.Initialize(MAX_BUFFER_NUMBER);
m_PacketPool.Initialize(MAX_PACKET_NUMBER);

// Allocate KNdisPacket from UCHAR array
// PUCHAR buf;
// UINT size;
KNdisPacket packet = m_PacketPool.Allocate();
if (packet.IsValid())
{
    KNdisBuffer buffer = m_BufferPool.Allocate(buf, size);
    if (buffer.IsValid())
    {
        packet.ChainAtBack(buffer);
    }

}

return packet;
anylin
驱动牛犊
驱动牛犊
  • 注册日期2005-06-07
  • 最后登录2008-11-04
  • 粉丝0
  • 关注0
  • 积分365分
  • 威望45点
  • 贡献值0点
  • 好评度29点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-06-30 13:02
谢谢!

但是从UCHAR数组 怎么转换成KNdisPacket呢
noproblem
驱动牛犊
驱动牛犊
  • 注册日期2002-07-24
  • 最后登录2005-12-14
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-06-30 08:58
对不起,没写完就发出来了. 上一篇取消.

// KNdisPacket packet;
UINT packetSize = packet.QueryTotalLength();
UCHAR* buf = new UCHAR[packetSize];
if (buf != 0)
{
  KNdisBuffer ndisBuffer = packet.QueryFirstBuffer();
  int offset = 0;
  while (ndisBuffer.IsValid())
  {
    int len = ndisBuffer.Length();
     PVOID va = ndisBuffer.Address();
     NdisMoveMemory(buf + offset, va, len);
     offset += len;
    ndisBuffer = ndisBuffer.GetNext();
  }
}

当然, 有一些出错处理没有写,你可以根据需要加上去.
noproblem
驱动牛犊
驱动牛犊
  • 注册日期2002-07-24
  • 最后登录2005-12-14
  • 粉丝0
  • 关注0
  • 积分15分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-06-30 08:53
// KNdisPacket packet;
UINT packetSize = packet.QueryTotalLength();
UCHAR* buf = new UCHAR[packetSize];
if (buf != 0)
{
    KNdisBuffer ndisBuffer = packet.QueryFirstBuffer();
    int offset = 0;
    while (ndisBuffer.IsValid())
    {
        int len = ndisBuffer.Length();

        ndisBuffer = ndisBuffer.GetNext();
    }
}
游客

返回顶部