阅读:2791回复:21
Filedisk中格式化为什么要十几分钟?????????????????
为什么在用filedisk虚拟3G的硬盘进行格式化时需要12分钟左右,文件里的读写采用的是des加解密,我只是在文件末尾加了512字节的字符串,为什么会要这么长的时间?那为仁兄帮我分析一下是什么原因,谢谢!
|
|
沙发#
发布于:2003-07-24 13:55
把你的代码贴出来看看,我一般格式化虚拟5G硬盘只要3分钟.
|
|
|
板凳#
发布于:2003-07-24 16:58
}
其中key是应用层传下的记录,key_des是应用层传下来加解文件的密码;encrypt是加密函数,decrypt是解密函数。有劳wowocock大哥那,谢谢! [编辑 - 8/4/03 by li_jie] |
|
地板#
发布于:2003-07-28 09:22
你的key_des是不是定义了全局变量(如:PCHAR inbuf,后用
inBuf = Irp->AssociatedIrp.SystemBuffer 到密钥)如果这样是有问题的。 你是怎么定义的? |
|
地下室#
发布于:2003-07-28 09:33
楼上的大哥,key_des我是定义的全局变量,这样会有什么问题吗?如果有请告诉我怎么定义,谢谢!
|
|
5楼#
发布于:2003-07-29 09:46
你是如何定义key_des的全局变量的。又是如何给他赋值的。你给key_des分配内存了吗。将你这部分代码贴出来看看。我帮你改一下。
|
|
6楼#
发布于:2003-07-29 10:27
建议你不要在驱动层进行加密解密,放到RING3层去做.
|
|
|
7楼#
发布于:2003-07-29 11:19
在驱动层进行加密解密是没有问题的!安全性更好!
|
|
8楼#
发布于:2003-07-29 12:35
我把key_des放到 struct _DEVICE_EXTENSION 中进行不分配空间(PUCHAR key_des)和分配空间(PUCHAR key_des[8])两种情况和直接在filedisk.h中定义进行了比较,可格式化还是要这么久的时间。其中不分配空间(PUCHAR key_des)是指在应用层将key传下时再为key_des分配空间,再unload时释放掉,下面是定义为PUCHAR key_des[8]时的取值
case IOCTL_FILE_DISK_DESKEY: { PUCHAR deskey=NULL; deskey=Irp->AssociatedIrp.SystemBuffer; RtlZeroMemory(device_extension->key_des, 8); RtlCopyMemory(device_extension->key_des,deskey,8); status = STATUS_SUCCESS; Irp->IoStatus.Information = 8; break; } 这样有问题吗?请指点。谢谢。 |
|
9楼#
发布于:2003-07-29 13:52
key_des和deskey你都没有分配空间(用ExAllocatePool),你在UNLOAD 中如何释放的。
|
|
10楼#
发布于:2003-07-29 15:16
to assert&chuip
我上面谈到我用过3中方式试过,上面代码中的key_des是这么定义的PUCHAR key_des[8]。 你说的那种我也试过;之后在unload中释放,可是还是要那么多时间啊。 [编辑 - 8/4/03 by li_jie] |
|
11楼#
发布于:2003-07-29 15:42
你在设备扩展里加了
PUCHAR key; PUCHAR key_des; 有没有做其他处理,直接在case IOCTL_FILE_DISK_DESKEY:中使用了吗? |
|
12楼#
发布于:2003-07-29 17:05
是的,变量key_des在case IOCTL_FILE_DISK_DESKEY中获得上层传下来的8位密码,在这之前没有作别的处理,之后就在读写中用来加解密,unload时释放调。没有在别处用到。
[编辑 - 8/4/03 by li_jie] |
|
13楼#
发布于:2003-07-30 08:45
晕,你在每次读写时都进行加解密???进行格式化的时候,系统会频繁写的你的文件,都进行加解密,速度当然慢拉.
|
|
|
14楼#
发布于:2003-07-30 12:51
to :wowocock
不要晕那,不是你说的那个原因,我把加解密去掉后,仍然要这么就的时间。 [编辑 - 7/30/03 by li_jie] |
|
15楼#
发布于:2003-07-30 17:22
如果我在io_stack->Parameters.Write.ByteOffset.QuadPart=0时,不在文件末尾写512字节,仍然进行des加密(包括格式化时),这样格式化速度就快。但这512字节是在写格式化信息前写入的,根本没影响,为什么会这么慢呢?
|
|
16楼#
发布于:2003-07-30 20:48
真的很奇怪,我也在文件后面加了512个字节,不过我在RING3通过WRITEFILE加的,在RING0只进行读写,要么你也试试看??
|
|
|
17楼#
发布于:2003-07-31 08:56
为什么我在我把key_des放到 struct _DEVICE_EXTENSION 中(PUCHAR key_des)
然后, case IOCTL_FILE_DISK_DESKEY: { PUCHAR deskey=NULL; deskey=Irp->AssociatedIrp.SystemBuffer; RtlZeroMemory(device_extension->key_des, 8); RtlCopyMemory(device_extension->key_des,deskey,8); status = STATUS_SUCCESS; Irp->IoStatus.Information = 8; break; } 从应用层传递密钥后机器马上关机重新启动。 如果我改成: case IOCTL_FILE_DISK_DESKEY: { //PUCHAR deskey=NULL; //deskey=Irp->AssociatedIrp.SystemBuffer; //RtlZeroMemory(device_extension->key_des, 8); //RtlCopyMemory(device_extension->key_des,deskey,8); device_extension->key_des=Irp->AssociatedIrp.SystemBuffer; status = STATUS_SUCCESS; Irp->IoStatus.Information = 8; break; } 这样机器不会关机重启了。但是这样我CREAT的硬盘不能马上格式化,格式化完了我在卸载掉,然后再MOUNT 上来,发现该硬盘没有格式化。 哪为兄弟能给我提点建议。 |
|
|
18楼#
发布于:2003-08-01 15:48
to wowocock
我现在将我要写入的数据不放到case IRP_MJ_WRITE中写入,而放到case IOCTL_FILE_DISK_CLOSE_FILE中写入,格式化容量为2G的速度不到一分中,可是卸载(umount)时要八九分钟左右,这是为什么?我单步调试FileDiskUmount()函数发现,程序运行到 if (!DeviceIoControl( Device, IOCTL_FILE_DISK_CLOSE_FILE, NULL, 0, NULL, 0, &BytesReturned, NULL )) { PrintLastError(\"FileDisk:\"); CloseHandle(Device); return -1; } 时程序就停下了,在这一步执行时间很长,我用softice跟踪,可是运行这一句后就进入汇编代码了。我还用刚下载的filedisk(没加任何代码的)运行,也是这样,格式化2G不到一分钟,可是卸载也要八九分钟。能告诉我这是什么原因吗?如果按我前面帖子说的那样作,卸载2G的盘不到半分钟,只是格式化的时候要八九分钟,能告诉我吗?谢谢!!! |
|
19楼#
发布于:2003-08-01 18:19
不知道,不过我UMOUNT 5G硬盘不用10秒即可,晕
|
|
|
上一页
下一页