li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2791回复:21

Filedisk中格式化为什么要十几分钟?????????????????

楼主#
更多 发布于:2003-07-23 09:36
为什么在用filedisk虚拟3G的硬盘进行格式化时需要12分钟左右,文件里的读写采用的是des加解密,我只是在文件末尾加了512字节的字符串,为什么会要这么长的时间?那为仁兄帮我分析一下是什么原因,谢谢!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2003-07-24 13:55
把你的代码贴出来看看,我一般格式化虚拟5G硬盘只要3分钟.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-07-24 16:58
}
其中key是应用层传下的记录,key_des是应用层传下来加解文件的密码;encrypt是加密函数,decrypt是解密函数。有劳wowocock大哥那,谢谢!

[编辑 -  8/4/03 by  li_jie]
assert&chuip
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2008-06-02
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-07-28 09:22
你的key_des是不是定义了全局变量(如:PCHAR inbuf,后用
inBuf = Irp->AssociatedIrp.SystemBuffer 到密钥)如果这样是有问题的。
   你是怎么定义的?
li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-07-28 09:33
楼上的大哥,key_des我是定义的全局变量,这样会有什么问题吗?如果有请告诉我怎么定义,谢谢!
assert&chuip
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2008-06-02
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-07-29 09:46
你是如何定义key_des的全局变量的。又是如何给他赋值的。你给key_des分配内存了吗。将你这部分代码贴出来看看。我帮你改一下。
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
6楼#
发布于:2003-07-29 10:27
建议你不要在驱动层进行加密解密,放到RING3层去做.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
assert&chuip
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2008-06-02
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2003-07-29 11:19
在驱动层进行加密解密是没有问题的!安全性更好!
li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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;
}
这样有问题吗?请指点。谢谢。
assert&chuip
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2008-06-02
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2003-07-29 13:52
key_des和deskey你都没有分配空间(用ExAllocatePool),你在UNLOAD 中如何释放的。
  
li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2003-07-29 15:16
to assert&chuip
   我上面谈到我用过3中方式试过,上面代码中的key_des是这么定义的PUCHAR key_des[8]。
你说的那种我也试过;之后在unload中释放,可是还是要那么多时间啊。

[编辑 -  8/4/03 by  li_jie]
assert&chuip
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2008-06-02
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2003-07-29 15:42
你在设备扩展里加了
PUCHAR key;
PUCHAR key_des;
有没有做其他处理,直接在case IOCTL_FILE_DISK_DESKEY:中使用了吗?
li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2003-07-29 17:05
是的,变量key_des在case IOCTL_FILE_DISK_DESKEY中获得上层传下来的8位密码,在这之前没有作别的处理,之后就在读写中用来加解密,unload时释放调。没有在别处用到。


[编辑 -  8/4/03 by  li_jie]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
13楼#
发布于:2003-07-30 08:45
晕,你在每次读写时都进行加解密???进行格式化的时候,系统会频繁写的你的文件,都进行加解密,速度当然慢拉.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2003-07-30 12:51
to :wowocock
   不要晕那,不是你说的那个原因,我把加解密去掉后,仍然要这么就的时间。

[编辑 -  7/30/03 by  li_jie]
li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2003-07-30 17:22
如果我在io_stack->Parameters.Write.ByteOffset.QuadPart=0时,不在文件末尾写512字节,仍然进行des加密(包括格式化时),这样格式化速度就快。但这512字节是在写格式化信息前写入的,根本没影响,为什么会这么慢呢?
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
16楼#
发布于:2003-07-30 20:48
真的很奇怪,我也在文件后面加了512个字节,不过我在RING3通过WRITEFILE加的,在RING0只进行读写,要么你也试试看??
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
jry9524
驱动牛犊
驱动牛犊
  • 注册日期2002-01-10
  • 最后登录2005-03-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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 上来,发现该硬盘没有格式化。

哪为兄弟能给我提点建议。
Beyon
li_jie
驱动牛犊
驱动牛犊
  • 注册日期2003-05-21
  • 最后登录2005-05-28
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
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的盘不到半分钟,只是格式化的时候要八九分钟,能告诉我吗?谢谢!!!
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
19楼#
发布于:2003-08-01 18:19
不知道,不过我UMOUNT 5G硬盘不用10秒即可,晕
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
上一页
游客

返回顶部