阅读:1545回复:3
有关NDIS中使用内存的疑问
我知道:在NDIS驱动中,分配的包缓冲都是nopage的,不知道的是:
1)能不能在NDIS中使用paged内存?不用来存储报文的,就是存储普通的变量; 2)NDIS中一般使用NdisAllocateMemoryWithTag分配内存,能不能使用ExAllocatePool这样的函数? 两个函数要求都是IRQL <= DISPATCH_LEVEL 还有一个问题: 上层应用程序与NDIS通讯的时候,一般是由NDIS分配一块内存,然后通过METHOD_BUFFERED方式把内存地址传递到用户空间,双方共享这片内存。能不能每次需要数据时,直接将上层内存缓冲地址采用METHOD_NEITHER方式传递给NDIS,由NDIS将上传数据放在这个BUF中传回?(不考虑性能问题) 多谢! |
|
沙发#
发布于:2007-10-26 22:22
可以使用分页内存。但必须确保访问分页内存的代码运行在PASSIVE_LEVEL。在DISPATCH_LEVEL访问分页内存会导致page fault
引用第0楼quentin于2007-10-26 10:42发表的 有关NDIS中使用内存的疑问 : |
|
板凳#
发布于:2007-10-31 16:20
引用第1楼rangzh于2007-10-26 22:22发表的 : 是不是中间层驱动的miniport和protocol函数都运行在DISPATCH_LEVEL,所以不能在其中使用分页内存? 刚刚看了以下帮助,原来IMD的miniport和protocol函数都有各自的IRQL运行级别,所以要区别处理。 |
|
地板#
发布于:2007-11-11 10:54
引用楼主quentin于2007-10-26 10:42发表的 有关NDIS中使用内存的疑问 : 1. 可以 2. 可以 |
|