blueshelly
驱动牛犊
驱动牛犊
  • 注册日期2007-06-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:2073回复:7

(50分)请教版主,各位大佬如何在sfwrite中获取文件写入的真实长度

楼主#
更多 发布于:2007-06-26 10:56
不好意思,我没有多少分,

比如应用程序调用  fwrite(data, 1, 30, fp),
最后到过滤驱动时,sfwrite看到的长度是页对齐的IrpSp->Parameters.Write.Length == 4096
最终真正写入介质的数据长度 又是 30, 而且最终从介质读到过滤驱动的数据 也是 30

我们可以在SfReadCompletion中得到真正的读入数据长度 Irp->IoStatus.Information == 30
应该也可以在SfWriteCompletion中同理得到写入长度,
可是我们在写介质数据之前,也就是 sfwrite中怎么得到这个真正的写入数据长度呢? (这点对加解密还是很重要的)

这个问题在网上,还有本论坛也有人问过,但一直没看到真正解决问题的解答,
希望大家不吝赐教

谢谢
驱网无线,快乐无限
liyunch
驱动小牛
驱动小牛
  • 注册日期2001-06-28
  • 最后登录2014-09-05
  • 粉丝0
  • 关注0
  • 积分13分
  • 威望134点
  • 贡献值0点
  • 好评度94点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-06-26 16:41
先pass到下层让下层驱动写,然后得到真正的长度,这时你再写入即可.
blueshelly
驱动牛犊
驱动牛犊
  • 注册日期2007-06-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2007-06-26 16:57
引用第1楼liyunch于2007-06-26 16:41发表的  :
先pass到下层让下层驱动写,然后得到真正的长度,这时你再写入即可.


请问liyunch能给我写一段示例代码么?我不知道这个具体怎么完成
驱网无线,快乐无限
blueshelly
驱动牛犊
驱动牛犊
  • 注册日期2007-06-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-06-27 11:28
没人知道吗?自己先顶一下
驱网无线,快乐无限
geland
驱动牛犊
驱动牛犊
  • 注册日期2003-12-28
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分25分
  • 威望251点
  • 贡献值0点
  • 好评度54点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-06-27 11:52
我猜想liyunch的意思是在你收到写请求的时候,设置完成例程,把缓冲中的内容,写的起始位置记录下来,然后把请求传递到下层驱动中,在完成例程中得到实际写如的长度,之后你可以处理你先前记录下来的缓冲中的内容,在在相同的位置想下层驱动发出一个写请求。希望你能明白,呵呵!
blueshelly
驱动牛犊
驱动牛犊
  • 注册日期2007-06-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-06-27 13:00
引用第4楼geland于2007-06-27 11:52发表的  :
我猜想liyunch的意思是在你收到写请求的时候,设置完成例程,把缓冲中的内容,写的起始位置记录下来,然后把请求传递到下层驱动中,在完成例程中得到实际写如的长度,之后你可以处理你先前记录下来的缓冲中的内容,在在相同的位置想下层驱动发出一个写请求。希望你能明白,呵呵!


我知道你的意思,但是这样不是在介质中写了2次吗?有没有更好的办法
驱网无线,快乐无限
devia
论坛版主
论坛版主
  • 注册日期2005-05-14
  • 最后登录2016-04-05
  • 粉丝3
  • 关注0
  • 积分1029分
  • 威望712点
  • 贡献值1点
  • 好评度555点
  • 原创分8分
  • 专家分4分
6楼#
发布于:2007-06-27 13:16
1. 首先我没有解决方法,:-)
2. 再者你可以看看下面类似的讨论
http://www.osronline.com/showThread.CFM?link=108587
人总在矛盾中徘徊。。。
blueshelly
驱动牛犊
驱动牛犊
  • 注册日期2007-06-04
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分140分
  • 威望15点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2007-06-27 14:08
引用第6楼devia于2007-06-27 13:16发表的  :
1. 首先我没有解决方法,:-)
2. 再者你可以看看下面类似的讨论
http://www.osronline.com/showThread.CFM?link=108587


如果不能知道这个实际长度的话,那么透明加密就只能用像RC4这种解密数据x[m]只依赖于数据x[0--m-1]的加密算法了,
像AES这种固定长度或不固定长度的加解密算法总会在数据最后一页出现一些无法正确解密的数据
驱网无线,快乐无限
游客

返回顶部