edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
20楼#
发布于:2002-07-31 11:13
xdjm,不知道共享内存的分配是不是只限于非分页内存呢?因为我的Driver要用DMA进行大数据量传输,如果频繁的使用非分页内存,肯定会影响系统资源的,所以我打算采取分页内存来作
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
21楼#
发布于:2002-07-31 11:33
版主,我的意思就是只限于“3.Shared memory”,也就是说,在这种情况下,当App把数据写到Shared memory后,Driver是如何得到通知的?
1.用DeviceIoControl传一个event给Driver;
2.驱动程序巡检Shared memory里的标志位。
第二种方案肯定不行,因为driver还要干其他的事情呢,用线程又较麻烦;第一种方案根本体现不出Shared memory的优势来!
不知道还有其他的方法吗?
 

至于通知,就是用共享Event,或者是用命名Event(这只能在NT4.0以上的版本中才有用),其它的方法我没有做过。至优势,我认为是一个折衷的的问题。我倒认为,只要功能实现了,多数时候是不需要考虑什么优势的。
Tom_lyd
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
22楼#
发布于:2002-07-31 12:56
xdjm,不知道共享内存的分配是不是只限于非分页内存呢?因为我的Driver要用DMA进行大数据量传输,如果频繁的使用非分页内存,肯定会影响系统资源的,所以我打算采取分页内存来作

可以使用分页内存,但是好象必须锁定才行。
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
23楼#
发布于:2002-08-05 09:27
请问xdjm:UserAddress=MnMapLockedPages(Mdl,UserMode),那么如何在我的应用程序里面使用UserAddress呢?因为UserAddress是在Driver里定义的!
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
24楼#
发布于:2002-08-05 09:29
另外,在使用分页内存时,如何锁定呢?真的很急,谢谢!
Tom_lyd
驱动大牛
驱动大牛
  • 注册日期2001-09-02
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
25楼#
发布于:2002-08-05 09:42
MmProbeAndLockedPages
Tom_lyd
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
26楼#
发布于:2002-08-05 13:25
1。UserAddress可以直接在APP中使用,例如:UserAddress[0]=1;
2。关于分页内存,你可以这么做:

PMDL Mdl = IoAllocateMdl(
  VirtualAddress, // 分页内存的虚拟地址。
  NumberOfBytes,
  FALSE,
  FALSE,
  NULL);

MmProbeAndLockPages(Mdl,KernelMode,IoWriteAccess); // 锁定它

PVOID UserAddress = MmMapLockedPages(Mdl,UserMode);

OK!
edriver
驱动小牛
驱动小牛
  • 注册日期2002-03-04
  • 最后登录2006-09-15
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望3点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
27楼#
发布于:2002-08-05 14:11
可是UserAddress=MnMapLockedPages(Mdl,UserMode);这句话是放在我的Driver里的,那么我的App如何识别它呢?是不是用DeviceIoControl()传上去的呢?
xdjm
驱动中牛
驱动中牛
  • 注册日期2001-04-02
  • 最后登录2024-01-25
  • 粉丝0
  • 关注0
  • 积分34分
  • 威望25点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
  • 社区居民
28楼#
发布于:2002-08-06 13:06
可是UserAddress=MnMapLockedPages(Mdl,UserMode);这句话是放在我的Driver里的,那么我的App如何识别它呢?是不是用DeviceIoControl()传上去的呢?  

是的。
上一页 下一页
游客

返回顶部