yeammy
驱动牛犊
驱动牛犊
  • 注册日期2002-12-27
  • 最后登录2012-02-22
  • 粉丝0
  • 关注0
  • 积分63分
  • 威望12点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
阅读:1141回复:3

DIRECT I/O探讨!!!???

楼主#
更多 发布于:2003-06-20 19:36
请问:
   (1)在DIRECT I/O中,驱动程序使用应用程序申请的内存,是否需要保护机制?如何实现?
   (2)在DIRECT I/O中,从ReadFile传递的缓存是分页内存,而StartIo  DPC的运行级别高于PASSIVE―LEVEL,如何处理?
   (3)IO_REMOVE_LOCK 与 KSPIN_LOCK的区别?在何处使用?
swf2003
驱动中牛
驱动中牛
  • 注册日期2003-02-13
  • 最后登录2011-10-28
  • 粉丝1
  • 关注0
  • 积分4分
  • 威望22点
  • 贡献值0点
  • 好评度20点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-23 09:26
回答
(1)在DIRECT I/O中 应用程序申请的内存是用内存描述表的方式传到驱动中的,在IRP 中是 IRP->MdlAddress ,一般不需要特殊的保护,当然你不要访问越界。MdlAddress 的释放由I/O 管理器负责。
你的认可是对我最大的鼓励!
arthurtu
驱动巨牛
驱动巨牛
  • 注册日期2001-11-08
  • 最后登录2020-12-19
  • 粉丝0
  • 关注0
  • 积分26分
  • 威望161点
  • 贡献值0点
  • 好评度35点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2003-06-23 13:52
Mdl描述的是存在于在物理内存的一块内存。

没有仔细看书?
lifeship
驱动小牛
驱动小牛
  • 注册日期2002-10-18
  • 最后登录2005-07-19
  • 粉丝0
  • 关注0
  • 积分6分
  • 威望2点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-09 23:38
请问:
(1)一般无需保护,在io操作从驱动返回前,线程被阻塞,不可能进行其他操作,当然,你要保证此时不被其他线程操作,但这实际上是每个共享数据都需要注意的问题。

(2)在io传导驱动程序前,io管理器已经将这些分页内存锁定了,可以保证不发生缺页
(3) KSPIN_LOCK 你可以任意定义,而某个IO_REMOVE_LOCK 只有一个。
杯汝前来,  老子今朝,  放荡形骸!  甚长年抱渴,  咽如焦釜,  于今喜醉,  气似奔雷!  慢说刘伶,  古今达者,  醉后何妨死便埋! 
游客

返回顶部