kkggas
驱动牛犊
驱动牛犊
  • 注册日期2007-02-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1604回复:5

如何在内存中虚拟一个磁盘分区出来?

楼主#
更多 发布于:2007-02-13 14:52
  由于数据的安全性的要求,不能将从网络上传过来的数据保存在本地,
 
但是应用程序由必须通过有本地的路径的全文件名来打开,所以想到使用

内存虚拟一个磁盘分区,希望能得到大家的点拨。

最新喜欢:

TOMG2004TOMG20...
Sucsor
驱动牛犊
驱动牛犊
  • 注册日期2005-02-05
  • 最后登录2007-03-27
  • 粉丝0
  • 关注0
  • 积分253分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分2分
  • 专家分0分
沙发#
发布于:2007-02-13 15:14
关键看你要虚拟什么类型分区,FAT,NTFS,具体实现不一样,但是思路都一样.
硬盘分区是实际的媒介,内存分区,只是你把读和写导向到内存了.
Kmdkit这个包有个Demo,当然是用MASM写的.
可以参考一下.我也只是研究过这个Demo,大体明白思路.
如果楼主实现了,不妨共享一下.
Sucsor
驱动牛犊
驱动牛犊
  • 注册日期2005-02-05
  • 最后登录2007-03-27
  • 粉丝0
  • 关注0
  • 积分253分
  • 威望26点
  • 贡献值0点
  • 好评度25点
  • 原创分2分
  • 专家分0分
板凳#
发布于:2007-02-13 15:24
论坛不能上传附件,Ramdisk可以从这里下载
http://www.debugman.com/read.php?tid=382
kkggas
驱动牛犊
驱动牛犊
  • 注册日期2007-02-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地板#
发布于:2007-02-13 16:02
谢谢  Sucsor  !!!
 
 我看看。我是做企业应用的,也是由于其他原因要研究这些东东。
kkggas
驱动牛犊
驱动牛犊
  • 注册日期2007-02-10
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2007-02-13 16:05
Ramdisk  的源代码我有,大概如下:

不过实在有些看不明白。如果可以希望能够指点。我的QQ是:19811933

    char base[DISKSIZE];

BOOL OnSysDynamicDeviceInit()
{    
    int add_i, nsec;    
    USHORT fatEntries;
    USHORT   fatSectorCnt;
    PUCHAR firstFatSector;
    PBOOTSECT bsp;
    PWORD  fat;

    for(add_i=0;add_i<DISKSIZE;add_i++)
        base[add_i]=0;
        
    bsp = (PBOOTSECT) base;
    fat = (PWORD) (base + 512);
    nsec = DISKSIZE/512;

    // Fill in dummy boot sector so we look like a disk
    bsp->jmpinst[0] = 0xEB;
    bsp->jmpinst[1] = 0x3C;
    bsp->jmpinst[2] = 0x90;
    memcpy(bsp->vendid, "WALTONEY", 8);
    bsp->secsize = 512;                    // each sector is 512 bytes long
    bsp->clustsize = 1;                    // one sector per cluster
    bsp->numrsv = 1;                    // no reserved sectors besides this one
    bsp->numfat = 1;                    // one FAT should be enough
    bsp->numfiles = 128;                // more than enough to prove the point!
    bsp->numsectors = 0;                // fill in totsectors instead
    bsp->media = 0xF8;                    // claim we're a fixed disk
    bsp->fatsectors = (WORD) ((nsec + nsec + 511) / 512);
    bsp->tracksectors = (WORD) nsec;    // only 1 track, so all sectors are on it
    bsp->numtracks = 1;                    // 1 track
    bsp->numhidden = 0;                    // no hidden sectors
    bsp->totsectors = nsec;                // this many sectors
    bsp->drive = 0x80;                    // flag for a hard drive
    bsp->xboot = 0x29;                    // flag as extended boot sector
    bsp->volid = (DWORD) base;                    // use base address as volume ID
    memcpy(bsp->label, "NO NAME    ", 11);
    memcpy(bsp->fattype, "FAT16   ", 8);
    
    bsp->part[0].indicator = 0x80;
    bsp->part[0].parttype = 4;            // DOS 16-bit FAT
    bsp->part[0].bias = 0;
    bsp->part[0].partsize = nsec;
    
    bsp->signature = 0xAA55;                    // boot sector signature

    // Initialize the start of the FAT at sector 1

    fat[0] = 0xFFF8;            // reserved bytes
    fat[1] = 0xFFFF;
        
        
    // Now register with the IOS, passing a pointer to the Device
    // Registration Packet that is declared above using macro
    // Declare_Port_Driver. No error returns are defined for this call.

    IOS_Register(&RAMDISK_Drp);

    // Return TRUE to indicate a successful initialization.

    return TRUE;
}
rayyang2000
管理员
管理员
  • 注册日期2001-03-23
  • 最后登录2012-09-13
  • 粉丝3
  • 关注0
  • 积分1036分
  • 威望925点
  • 贡献值3点
  • 好评度823点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2007-02-14 07:37
引用第4楼kkggas2007-02-13 18:05发表的“”:
Ramdisk  的源代码我有,大概如下:

不过实在有些看不明白。如果可以希望能够指点。我的QQ是:19811933

    char base[DISKSIZE];
.......


你做98的driver么?
天天coding-debugging中----超稀饭memory dump file ======================================================== [b]Windows Device Driver Development and Consulting Service[/b] [color=blue][url]http://www.ybwork.com[/url][/color] ========================================================
游客

返回顶部