Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2621回复:24

*77分的问题*

楼主#
更多 发布于:2004-04-07 17:47
如何动态增加镜像文件的大小,但不能改变其原有内容!
*学*
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-04-07 18:10
这个问题还是比较简单的,给你一个方法。
如果一个镜像文件不够,你再创建一个镜像文件,在读写的时候注意读写相应文件的相应的偏移(需要一个机制来管理)。
77分拿来。
 :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
 :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
 :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
这个方法一定是可行的。
另外一个方法:
调用setfilepointer来增加原来的文件的大小。对应去驱动中就是setfilesize的一个setfileinfomation的什么咚咚。
不限容量的免费邮箱 www.k65.net
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-04-07 18:32
贪心可爱的帅哥:
    假设我原来镜像文件大小是8M,我在原有的镜像文件后面再增加
8M,我在驱动中先打开原文件,再写入8M的0x0,一次写入512字节。
最后发现我镜像文件确实变为16M了,但又要格式化,原文件也就没了!

    还有setfilesize,这个函数好像找不到。


注: 我试成功了,立刻给你加分!谢谢你首先回答,先奖你10再说。

[编辑 -  4/7/04 by  Zhujnt]
*学*
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
地板#
发布于:2004-04-07 21:05
好象没那么简单
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-04-08 08:47
nustzhua ,我那样做不行的,镜像文件虽然变为16M,里面的内容也没变,但虚拟出来的硬盘仍是8M ,那该怎么做呢??

[编辑 -  4/8/04 by  Zhujnt]
*学*
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-04-08 09:26
看来偶的下午的思维确实有些问题。
其实虽然可以增加文件的大小,可是你想啊,空间变大了,是不是fat表也要变,fat表所占区的大小也要变。
所以说原来的方法有问题。
再来一个想法:如果原来的镜像文件虚拟出来的分区是ntfs的,
你可以再创建一个文件虚拟出一个分区,然后你把这个分区挂到原先的那个分区的一个目录下。
不限容量的免费邮箱 www.k65.net
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-04-08 09:29
驱动中设置文件的大小:
IRP_MJ_SET_INFORMATION的FilePositionInformation
不限容量的免费邮箱 www.k65.net
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-04-08 09:44
不管你的想法是对还是错,再奖励你10分!等我试成功再加分。

不过如何把这个分区挂到原先的那个分区的一个目录下呢? 稍详细一点,我还是个菜鸟!谢谢!


疑! 加分的按钮怎么没了??

[编辑 -  4/8/04 by  Zhujnt]
*学*
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-04-08 16:05
SetVolumeMountPoint

快快给分啊。
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
:D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D :D
不限容量的免费邮箱 www.k65.net
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-04-08 16:26
等我试成功了绝对说话算数,谢谢回答!

SetVolumeMountPoint是在应用程序中?但头文件没有!
msdn中说是windows.h,但我试了没用!

[编辑 -  4/8/04 by  Zhujnt]
*学*
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-04-08 18:26
Mounting a Volume at a Mount Point
The following sample demonstrates how to mount a file system.

This sample uses the following functions: GetVolumeNameForVolumeMountPoint and SetVolumeMountPoint.

#define _WIN32_WINNT 0x0500

#include <windows.h>
#include <stdio.h>

#define BUFSIZE 1024    // ample space for our string buffer

void
Syntax (char *argv)
{
   printf( "%s, mount a volume at a mount point.\n", argv );
   printf( "For example, \"mount c:\\mnt\\fdrive\\ f:\\\"\n" );
}

int
main( int argc, char *argv[] )
{
   BOOL bFlag;
   char Buf[BUFSIZE];            // temporary buffer for volume name

   if( argc != 3 )
   {
      Syntax( argv[0] );
      return( -1 );
   }

  // We should do some error checking on the inputs. Make sure
  // there are colons and backslashes in the right places, etc.

   bFlag = GetVolumeNameForVolumeMountPoint(
              argv[2], // input volume mount point or directory
                  Buf, // output volume name buffer
               BUFSIZE // size of volume name buffer
           );

   if (bFlag != TRUE)
   {
      printf( "Retrieving volume name for %s failed.\n", argv[2] );
      return (-2);
   }
   printf( "Volume name of %s is %s\n", argv[2], Buf );

   bFlag = SetVolumeMountPoint(
              argv[1], // mount point
                   Buf // volume to be mounted
           );

   if (!bFlag)
     printf ("Attempt to mount %s at %s failed.\n", argv[2], argv[1]);

   return (bFlag);
}
不限容量的免费邮箱 www.k65.net
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-04-08 18:27
声明不是我写的,msdn中自带的
不限容量的免费邮箱 www.k65.net
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-04-08 20:53
http://expert.csdn.net/Expert/topic/2941/2941608.xml?temp=.5400659

我早就把这代码贴在CSDN上了,因为我通不过编译,
GetVolumeNameForVolumeMountPoint
SetVolumeMountPoint
提示:没有定义,郁闷,我把可能的头文件都加了。

可惜,上面到现在都没有回复的 :(
*学*
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-04-09 09:32
解决这个问题的方法,
安装最新版本的sdk(vc6的的头文件和库太老),使用其头文件和库。
不限容量的免费邮箱 www.k65.net
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-04-09 13:44
老大,我想到好方法了,直接在应用层做。首先我们再建一个虚拟磁盘(空间要大哟)。然后直接对它格式化,再将原来那虚拟磁盘里的内容全部读出来,放到刚虚拟的磁盘中来。再把原来的虚拟磁盘撤销掉,这样相当于动态增加了它的大小!!

  现在的问题是: 我格式化它的时候,老是跳出格式化对话,能不跳出就可以了。老大,你说呢??当然,分数还是要给你加的 :D

http://expert.csdn.net/Expert/topic/2945/2945231.xml?temp=.9005091

[编辑 -  4/9/04 by  Zhujnt]
*学*
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
15楼#
发布于:2004-04-09 14:01
画蛇添足,看看最新版的FILEDISK是如何做的吧。。。。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-04-09 14:23
有最新版??里面有动态增加,还是格式化??我怎么找了还是旧的??

给个连接,谢谢!! :o :o :o :o 一样要分加!!

[编辑 -  4/9/04 by  Zhujnt]
*学*
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-04-09 14:36
FileDisk can use sparse files as disk images. A sparse file is a file were suficiently large blocks of zeros isn't allocated disk space. You can create sparse files with the tool mksparse.zip. To see how much disk space a file actually uses right click on the file and choose properties. If you for example creates a sparse file of 4GB, mounts it in FileDisk and formats it to NTFS, it will only take up 24MB on disk but looks like a normal disk of 4GB. When you copy files to it the used disk space will automatically increase.
http://www.insidewindows.info/mksparse.zip
http://www.insidewindows.info

这个我到是没有在意。
如果是这样的话,你的问题就解决了。
不限容量的免费邮箱 www.k65.net
nustzhua
驱动中牛
驱动中牛
  • 注册日期2002-06-19
  • 最后登录2015-09-27
  • 粉丝0
  • 关注0
  • 积分18分
  • 威望2点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-04-09 14:40
在msdn中搜索一下sparse files。
不限容量的免费邮箱 www.k65.net
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
19楼#
发布于:2004-04-09 14:45
不过只能NTFS的分区上使用,如果在FAT32的分区创建文件则无效,
估计是NTFS的FILE SYSTEM里的做了什么处理。
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
上一页
游客

返回顶部