zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1373回复:7

CcMapData问题

楼主#
更多 发布于:2007-05-11 09:07
  我创建了一个文件的FileObject, 长度是Len1,我第一次调用CcMapData时,会触发出一个Read,也就时会进入Read例程, 这时即使我调用过CcUnpinData函数,再调用CcMapData时,系统就不再会触发一个Read了,但map出来的内容是正确的,这我想是系统cache起的作用。
我的问题是,这时我如果把文件的长度重新设置成Len2,并且Len2 > Len1的,这时我再调用CcMapData函数,并且Offset=Len1,结果系统就是不触发Read,为什么啊。
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2007-05-11 10:34
自己顶一下
高手啊,谁能给个答案,我怎么样才能让系统触发出read啊,这个问题困扰了我好久了
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
driver12345
驱动牛犊
驱动牛犊
  • 注册日期2005-11-15
  • 最后登录2007-10-28
  • 粉丝0
  • 关注0
  • 积分814分
  • 威望84点
  • 贡献值0点
  • 好评度82点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-05-11 11:09
你的问题都太深奥了
大家都看不懂
你可以解释下你要做的目的
及其实现的功能
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-05-11 11:50
我是在写udf文件系统的驱动,现在我想map盘中两块数据, 这两个数据块在盘的物理地址是不连续的。我默认创建的FileObject长度只有一个数据块的长度,map第一块是成功的,我根据第一块的数据,找到第二块数据的在盘中物理地址,这时我想把第二块数据map出来,这样这个FileObject的数据由这两块数据组成的,可是我怎么也map不出第二块数据。
我测试了一下发现,我把CcMapData的offset和length都设置成第一块+第二块数据长度,倒是会触发一个read的,也就是会去盘里重新读取的,但如果我把Offset设置到第一块尾部,map长度为第二块长度,结果系统就是不会触发read,去盘里重新读取,不知道为什么?
谁能帮我,我高分相送
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
地下室#
发布于:2007-05-11 22:57
What is the return value of CcMapData. Did you set the parameter Flag to MAP_WAIT?
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
5楼#
发布于:2007-05-12 08:20
return is TRUE,  FLAG is set 0x01
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
6楼#
发布于:2007-05-14 23:07
引用第3楼zzq1912007-05-11 11:50发表的“”:
我默认创建的FileObject长度只有一个数据块的长度,map第一块是成功的,我根据第一块的数据,找到第二块数据的在盘中物理地址,这时我想把第二块数据map出来,这样这个FileObject的数据由这两块数据组成的,可是我怎么也map不出第二块数据。


I think the problem is here. CcInitializeCacheMap is called with first block size and you are trying to get first block + second block. Try CcSetFileSizes() to inform CM the change of file size before calling CcMapData() to get second data block.
zzq191
驱动中牛
驱动中牛
  • 注册日期2001-08-09
  • 最后登录2018-05-29
  • 粉丝17
  • 关注0
  • 积分1041分
  • 威望716点
  • 贡献值0点
  • 好评度318点
  • 原创分0分
  • 专家分0分
  • 社区居民
7楼#
发布于:2007-05-22 11:45
我在调用 CcMapData() 之前,先调用CcSetFileSizes()函数设置新的长度了,结果还是不行
现在我是对每一块创建一个FileObject,暂时可以读取了,但我想这个不是一个好的方式
我还是想只创建一个FileObject来实现,但我还没有找到失败的原因
QQ:416331891,承接windows下应用和驱动的开发,雅虎通:zzq191, Email:zzq191@21cn.com
游客

返回顶部