quentin
驱动牛犊
驱动牛犊
  • 注册日期2003-10-22
  • 最后登录2008-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
阅读:1544回复:3

有关NDIS中使用内存的疑问

楼主#
更多 发布于:2007-10-26 10:42
我知道:在NDIS驱动中,分配的包缓冲都是nopage的,不知道的是:
1)能不能在NDIS中使用paged内存?不用来存储报文的,就是存储普通的变量;
2)NDIS中一般使用NdisAllocateMemoryWithTag分配内存,能不能使用ExAllocatePool这样的函数?
    两个函数要求都是IRQL <= DISPATCH_LEVEL
    
还有一个问题:
上层应用程序与NDIS通讯的时候,一般是由NDIS分配一块内存,然后通过METHOD_BUFFERED方式把内存地址传递到用户空间,双方共享这片内存。能不能每次需要数据时,直接将上层内存缓冲地址采用METHOD_NEITHER方式传递给NDIS,由NDIS将上传数据放在这个BUF中传回?(不考虑性能问题)

多谢!
rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-10-26 22:22
可以使用分页内存。但必须确保访问分页内存的代码运行在PASSIVE_LEVEL。在DISPATCH_LEVEL访问分页内存会导致page fault

引用第0楼quentin于2007-10-26 10:42发表的 有关NDIS中使用内存的疑问 :
我知道:在NDIS驱动中,分配的包缓冲都是nopage的,不知道的是:
1)能不能在NDIS中使用paged内存?不用来存储报文的,就是存储普通的变量;
2)NDIS中一般使用NdisAllocateMemoryWithTag分配内存,能不能使用ExAllocatePool这样的函数?
    两个函数要求都是IRQL <= DISPATCH_LEVEL
    
.......
quentin
驱动牛犊
驱动牛犊
  • 注册日期2003-10-22
  • 最后登录2008-08-08
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望9点
  • 贡献值0点
  • 好评度9点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-10-31 16:20
引用第1楼rangzh于2007-10-26 22:22发表的  :
可以使用分页内存。但必须确保访问分页内存的代码运行在PASSIVE_LEVEL。在DISPATCH_LEVEL访问分页内存会导致page fault


是不是中间层驱动的miniport和protocol函数都运行在DISPATCH_LEVEL,所以不能在其中使用分页内存?
刚刚看了以下帮助,原来IMD的miniport和protocol函数都有各自的IRQL运行级别,所以要区别处理。
rangzh
驱动小牛
驱动小牛
  • 注册日期2005-04-24
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分8分
  • 威望150点
  • 贡献值0点
  • 好评度115点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-11-11 10:54
引用楼主quentin于2007-10-26 10:42发表的 有关NDIS中使用内存的疑问 :
我知道:在NDIS驱动中,分配的包缓冲都是nopage的,不知道的是:
1)能不能在NDIS中使用paged内存?不用来存储报文的,就是存储普通的变量;
2)NDIS中一般使用NdisAllocateMemoryWithTag分配内存,能不能使用ExAllocatePool这样的函数?
    两个函数要求都是IRQL <= DISPATCH_LEVEL
    
.......

1. 可以
2. 可以
游客

返回顶部