hzican 发表于 2016-3-24 00:17:58

再发一贴!关于微软Ramdisk的正确用法!

所有的帖子都是没有理解Ramdisk的原理:
首先,要ntldr或者bootmgr把文件加载到内存,Ramdisk.sys才会起作用,
它会自动安装”Windows RAM 磁盘控制器“和”Windows RAM 磁盘设备(卷)“,
所以大家都误解了ramdisk.sys,不用手工安装。否则,只会出现重复的设备,运气好能进入看见**警告的冲突设备,严重的造成冲突蓝屏dump!

正确的做法:
1. 做img文件,或者其他vhd,wim格式文件,只要你复制ramdisk.sys到\windows\system32\drivers目录,然后加载\windows\sysem32\config\system到hklm\0,
把下"\\DosDevices\\C:",修改成其他盘符,如U:盘,接着合并ramdisk.reg文件,注册服务即可,ramdisk.reg文件内容贴在最后。

2. 配置boot.ini或者bcd文件,启动img文件,windows系统自动发现两个新硬件,安装好,告诉你重启。
这个时候,你用的是内存,重启新设备配置的内容就没有了,所以要保存新状态,保存之前要修改system,因为ramdisk.inf会把新设备设置成手工启动。
合并ramdisk_autostart.reg文件到注册表,cmd命令:reg save HKLM\SYSTEM u:\system,导出新的system,

3.新的system文件覆盖老的img/vhd文件里面的system,制作结束!

;;;;;;;;;;;;;;;;;;;;
;;ramdisk.reg 内容
;;;;;;;;;;;;;;;;;;;;
Windows Registry Editor Version 5.00


"\\DosDevices\\C:"=hex:fc,57,b2,d9,4e,68,cb,4d,ab,79,03,cf,a2,f6,b7,50


"Class"="Ramdisk"
"ClassDesc"="@ramdisk.inf,%ClassName%;Ramdisk"
@="Ramdisk"
"IconPath"=hex(7):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,65,00,74,00,75,00,70,00,61,00,70,00,69,00,2e,00,64,00,6c,00,6c,00,2c,00,\
2d,00,33,00,32,00,00,00,00,00


"DisplayName"="Windows RAM Disk Driver"
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,72,00,61,00,6d,00,64,00,69,00,73,\
00,6b,00,2e,00,73,00,79,00,73,00,00,00
"Start"=dword:00000000
"Type"=dword:00000001


"DebugLevel"=dword:00000005
"DebugComponents"=dword:7fffffff

;;;;;;;;;;;;;;;;;;;;
;;ramdisk_autostart.reg 内容
;;;;;;;;;;;;;;;;;;;;
Windows Registry Editor Version 5.00


"Start"=dword:00000000

hzican 发表于 2016-4-3 22:09:08

2012shm 发表于 2016-4-3 09:23
是否win7的ramdisk.sys,x86、x64通用?还有楼主的方法7、8、10、xp、2008通用?

32位和64位的驱动是肯定不能通用的,2k/XP/03/Vista/Win7/8/10的方法都是一样的!
不过因为Win8/10没有合适的32位精简版,所以没有试验过.

没有合适的精简版,可以提供一个做RamOS的思路:
做成WimBoot架构,引导文件放在img/vhd文件包里面,用Bootmgr加载到内存,WimBoot文件放在Primo的智能镜像文件包里面,最后结果是两个内存盘!

yang77 发表于 2016-3-24 00:54:30

前排支持,感谢分享

20090101 发表于 2016-3-24 10:23:45

回头我也试试你的方法哈。

20090101 发表于 2016-3-24 10:49:18

能在详细一点就好了,我看得不是很明了。

movie001 发表于 2016-3-24 10:55:16

20090101 发表于 2016-3-24 10:49
能在详细一点就好了,我看得不是很明了。

他说的是不用手工安装旧设备RAMDISK,而用直接复制RAMDISK和修改注册表的方式将RMADISK弄进系统,减少蓝屏的几率

liumailong 发表于 2016-3-24 10:57:00

对微软的Ramdisk不了解。
请问能做内存盘吗?

shunshun 发表于 2016-3-24 11:14:50

受教了

hzican 发表于 2016-3-24 14:14:05

32位ramdisk.sys 能做最大988m的img文件,64位没有试过

hzican 发表于 2016-3-24 15:29:10

img文件有两种格式,一种没有MBR(分区镜像),一种带MBR的(一般是63个扇区),vhd有mbr(一般是128个扇区)所以Win7调用方法:
1.新建ramdiskoption,不要用系统默认的,删除SdiDevice,SdiPath;
2.新建参数RamdiskImageOffset,这个数字表示硬盘镜像文件有效数据从哪里开始读取;
   img文件没有mbr: 0*512=0 , img文件有mbr: 63*512=32256, vhd文件有mbr: 128*512=65536
3.新建wim启动项,设置ApplicationDevice和OSDevice参数里面的Ramdisk参数对应你新建的ramdiskoption项目guid
下面贴图,给不会设置的人参考:

hzican 发表于 2016-3-24 15:32:41

liumailong 发表于 2016-3-24 10:57
对微软的Ramdisk不了解。
请问能做内存盘吗?

这个就是做RamOS启动的

2011xiongdeyuan 发表于 2016-3-24 18:41:18

不错,支持下

2012shm 发表于 2016-3-25 07:46:45

受益匪浅,可以试试,回头请教

2012shm 发表于 2016-4-3 09:23:55

是否win7的ramdisk.sys,x86、x64通用?还有楼主的方法7、8、10、xp、2008通用?

2012shm 发表于 2016-4-4 19:56:03

hzican 发表于 2016-4-3 22:09
32位和64位的驱动是肯定不能通用的,2k/XP/03/Vista/Win7/8/10的方法都是一样的!
不过因为Win8/10没有合 ...

懂了,谢谢啊

linhu6682 发表于 2017-7-7 09:54:38

感谢分享

tt8023yy 发表于 2017-7-8 09:27:28

大哥 能做个批处理给我们直接用吗

wondaol 发表于 2017-7-18 13:58:41

我的Ramdisk 只是用来放浏览器的缓存

xmzhqw 发表于 2017-7-24 21:54:19

谢谢分享!看来这是在PE上用的。

y7y007 发表于 2018-1-16 19:14:11

win10 16299后 没了INF,只能用注册表方式安装Ramdisk,可离线导入
——出处坏坏小生

帖子改一下就可以了


;;;;;;;;;;;;;;;;;;;;
;;ramdisk.reg 内容
;;;;;;;;;;;;;;;;;;;;
Windows Registry Editor Version 5.00


"\\DosDevices\\C:"=hex:fc,57,b2,d9,4e,68,cb,4d,ab,79,03,cf,a2,f6,b7,50


"Class"="Ramdisk"
"ClassDesc"="@ramdisk.inf,%ClassName%;Ramdisk"
@="Ramdisk"
"IconPath"=hex(7):25,00,53,00,79,00,73,00,74,00,65,00,6d,00,52,00,6f,00,6f,00,\
74,00,25,00,5c,00,53,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,73,\
00,65,00,74,00,75,00,70,00,61,00,70,00,69,00,2e,00,64,00,6c,00,6c,00,2c,00,\
2d,00,33,00,32,00,00,00,00,00


"DisplayName"="Windows RAM Disk Driver"
"ErrorControl"=dword:00000001
"ImagePath"=hex(2):73,00,79,00,73,00,74,00,65,00,6d,00,33,00,32,00,5c,00,44,00,\
52,00,49,00,56,00,45,00,52,00,53,00,5c,00,72,00,61,00,6d,00,64,00,69,00,73,\
00,6b,00,2e,00,73,00,79,00,73,00,00,00
"Start"=dword:00000000
"Type"=dword:00000001


"DebugLevel"=dword:00000005
"DebugComponents"=dword:7fffffff


"0"=dword:00000000


"Count"=dword:00000001
"NextInstance"=dword:00000001
"0"="ROOT\\RAMDISK\\0000"


"ClassGUID"="{9d6d66a6-0b0c-4563-9077-a0e9a7955ae4}"
"Capabilities"=dword:00000000
"Driver"="{9d6d66a6-0b0c-4563-9077-a0e9a7955ae4}\\0000"
"Mfg"="Microsoft"
"Service"="Ramdisk"
"DeviceDesc"="Windows RAM 磁盘控制器"
"ConfigFlags"=dword:00000000
"ContainerID"="{00000000-0000-0000-FFFF-FFFFFFFFFFFF}"


"InfSection"="BusInstall"
"InfSectionExt"=".NT"
"ProviderName"="Microsoft"
"MatchingDeviceId"="ramdisk"
"DriverDesc"="Windows RAM 磁盘控制器""



;;;;;;;;;;;;;;;;;;;;
;;ramdisk_autostart.reg 内容
;;;;;;;;;;;;;;;;;;;;
Windows Registry Editor Version 5.00


"Start"=dword:00000000



2010sya 发表于 2018-1-16 20:19:44

不错,支持下

erin 发表于 2018-1-20 07:10:21

暂一个

wangziqiang 发表于 2018-9-10 16:37:21

来迟了 辛苦了谢谢啊

2010qaqz111 发表于 2019-5-30 12:25:30

这种加载ramdisk的方式最早是在进入桌面前就生效了的吧,不知道能不能作为普通的ramdisk应用,而不是必须作为RamOS启动盘?
页: [1]
查看完整版本: 再发一贴!关于微软Ramdisk的正确用法!