阅读:2138回复:7
(50分)请教版主,各位大佬如何在sfwrite中获取文件写入的真实长度
不好意思,我没有多少分,
比如应用程序调用 fwrite(data, 1, 30, fp), 最后到过滤驱动时,sfwrite看到的长度是页对齐的IrpSp->Parameters.Write.Length == 4096 最终真正写入介质的数据长度 又是 30, 而且最终从介质读到过滤驱动的数据 也是 30 我们可以在SfReadCompletion中得到真正的读入数据长度 Irp->IoStatus.Information == 30 应该也可以在SfWriteCompletion中同理得到写入长度, 可是我们在写介质数据之前,也就是 sfwrite中怎么得到这个真正的写入数据长度呢? (这点对加解密还是很重要的) 这个问题在网上,还有本论坛也有人问过,但一直没看到真正解决问题的解答, 希望大家不吝赐教 谢谢 |
|
|
沙发#
发布于:2007-06-26 16:41
先pass到下层让下层驱动写,然后得到真正的长度,这时你再写入即可.
|
|
板凳#
发布于:2007-06-26 16:57
引用第1楼liyunch于2007-06-26 16:41发表的 : 请问liyunch能给我写一段示例代码么?我不知道这个具体怎么完成 |
|
|
地板#
发布于:2007-06-27 11:28
没人知道吗?自己先顶一下
|
|
|
地下室#
发布于:2007-06-27 11:52
我猜想liyunch的意思是在你收到写请求的时候,设置完成例程,把缓冲中的内容,写的起始位置记录下来,然后把请求传递到下层驱动中,在完成例程中得到实际写如的长度,之后你可以处理你先前记录下来的缓冲中的内容,在在相同的位置想下层驱动发出一个写请求。希望你能明白,呵呵!
|
|
5楼#
发布于:2007-06-27 13:00
引用第4楼geland于2007-06-27 11:52发表的 : 我知道你的意思,但是这样不是在介质中写了2次吗?有没有更好的办法 |
|
|
6楼#
发布于:2007-06-27 13:16
|
|
|
7楼#
发布于:2007-06-27 14:08
引用第6楼devia于2007-06-27 13:16发表的 : 如果不能知道这个实际长度的话,那么透明加密就只能用像RC4这种解密数据x[m]只依赖于数据x[0--m-1]的加密算法了, 像AES这种固定长度或不固定长度的加解密算法总会在数据最后一页出现一些无法正确解密的数据 |
|
|