wnl0008
驱动牛犊
驱动牛犊
  • 注册日期2007-06-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
阅读:1666回复:7

NdisAllocateBufferPool的问题,请高手们帮帮我!

楼主#
更多 发布于:2007-09-14 15:42
在驱动初始化里面:
   NdisAllocateBufferPool(&Status,&PoolHandle,16);
      ASSERT(Status==NDIS_STATUS_SUCCESS);
没有触发断言,但是PoolHandle为0,虽然DDK里面说0是有效值,但是调用
   NdisAllocateBuffer(&Status,&Buffer,PoolHandle,PacketBuffer,PacketLength);
怎么也不成功,然后系统会蓝屏,这是什么问题呀,各位高手们?
linfeng1216
驱动小牛
驱动小牛
  • 注册日期2004-03-10
  • 最后登录2008-12-31
  • 粉丝0
  • 关注0
  • 积分818分
  • 威望89点
  • 贡献值0点
  • 好评度74点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-09-18 12:17
为什么要在驱动初始化里调用呢?

注意DriverEntry的 IRQL = PASSIVE_LEVEL。
这件事很难
wnl0008
驱动牛犊
驱动牛犊
  • 注册日期2007-06-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-09-18 16:06
NdisAllocateBufferPool(&Status,&PoolHandle,16);是在驱动初始化里面调用的,
NdisAllocateBuffer(&Status,&Buffer,PoolHandle,PacketBuffer,PacketLength);
是在延迟过程调用里面调用的。这两个函数的执行级别不都是IRQL <= DISPATCH_LEVEL吗?即使都在初始化里面调用也应该没问题的吧?这个程序我是用DS写的,是否DS框架封装了什么?能帮我解答一下吗,非常感谢,^_^
linfeng1216
驱动小牛
驱动小牛
  • 注册日期2004-03-10
  • 最后登录2008-12-31
  • 粉丝0
  • 关注0
  • 积分818分
  • 威望89点
  • 贡献值0点
  • 好评度74点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-09-19 09:14
这两个函数要求的执行级别是IRQL <= DISPATCH_LEVEL,而初始化是 IRQL = PASSIVE_LEVEL。
这件事很难
wnl0008
驱动牛犊
驱动牛犊
  • 注册日期2007-06-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-09-19 13:34
呵呵,我是个驱动初学者,对这块不是很熟悉。一个函数的执行级别IRQL <= DISPATCH_LEVEL,是否就说明在执行级别小于或等于DISPATCH_LEVEL的例程中都能调用,如果是这样的话,PASSIVE_LEVEL是小于DISPATCH_LEVEL的啊。小心虚心向各位前辈请教....
rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-09-19 23:53
你传进去的参数PacketBuffer正确吗?PacketBuffer需要事先分配好的

如果在DISPATCH_LEVEL,那么PacketBuffer是否应该是NonPaged,记不清了。。。
linfeng1216
驱动小牛
驱动小牛
  • 注册日期2004-03-10
  • 最后登录2008-12-31
  • 粉丝0
  • 关注0
  • 积分818分
  • 威望89点
  • 贡献值0点
  • 好评度74点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2007-09-20 09:33
句柄为0肯定不对,你的怎么只有3个参数呢?
你看Packet的例子:
NdisAllocatePacketPool(
            &status,
            &open->PacketPool,
            TRANSMIT_PACKETS,
            sizeof(PACKET_RESERVED));
这件事很难
wnl0008
驱动牛犊
驱动牛犊
  • 注册日期2007-06-10
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分2分
  • 威望33点
  • 贡献值0点
  • 好评度31点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-09-20 15:00
谢谢各位,感激不尽!NdisAllocateBufferPool就只有三个参数啊。
这个问题已经解决,改为在PASSIVE_LEVEL分配就对了,呵呵。在DSIPATCH_LEVEL用NdisAllocateMemoryWithTag都不成功,不明白什么原因!
还想请教两个问题:
    1、MiniportReturnPacket作用除了回收资源,还有其他用吗?如果不需要回收资源,是否就不要用了?
    2、上层IP地址的时候,底层驱动会有哪些动作呢?
游客

返回顶部