阅读:1606回复:5
如何在内存中虚拟一个磁盘分区出来?
由于数据的安全性的要求,不能将从网络上传过来的数据保存在本地,
但是应用程序由必须通过有本地的路径的全文件名来打开,所以想到使用 内存虚拟一个磁盘分区,希望能得到大家的点拨。 |
|
最新喜欢:![]() |
沙发#
发布于:2007-02-14 07:37
引用第4楼kkggas于2007-02-13 18:05发表的“”: 你做98的driver么? |
|
|
板凳#
发布于: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; } |
|
地板#
发布于:2007-02-13 16:02
谢谢 Sucsor !!!
我看看。我是做企业应用的,也是由于其他原因要研究这些东东。 |
|
地下室#
发布于:2007-02-13 15:24
论坛不能上传附件,Ramdisk可以从这里下载
http://www.debugman.com/read.php?tid=382 |
|
5楼#
发布于:2007-02-13 15:14
关键看你要虚拟什么类型分区,FAT,NTFS,具体实现不一样,但是思路都一样.
硬盘分区是实际的媒介,内存分区,只是你把读和写导向到内存了. Kmdkit这个包有个Demo,当然是用MASM写的. 可以参考一下.我也只是研究过这个Demo,大体明白思路. 如果楼主实现了,不妨共享一下. |
|