Apr 11 2009

让vista认到4G或以上内存(最大128G)

Category: 技术ssmax @ 12:47:52

注意:改完后会打开某些应用程序会蓝屏,而且是确定的发生,不是偶然,应该是应用程序也用到内核里面这段函数来获取内存限制的,所以呢,估计还是有一点问题。。。

 

昨天装了vista,听别人说是可以支持4G内存的,但是我自己怎么都弄不出来,PAE在开了DEP数据保护模式之下是默认开了的,也能认得出4G内存,但是能用的只有3.5G,最后网上找到一篇文章,一个牛人研究windows内核,发现是Windows许可证做的限制,如果把许可证换成windows 2008的就直接可以支持128G了,但是系统会有兼容性问题,所以牛人就自己修改内核,把从许可证里面获取内存限制的汇编代码改了一下。。。
原文如下:
http://www.geoffchappell.com/viewer.htm?doc=notes/windows/license/memory.htm

 

C:\Windows\system32\ntkrnlpe.exe

汇编:

Opcode Bytes Instruction
7C xx
jl      default
8B 45 FC
mov     eax,dword ptr [ebp-4]
85 C0
test    eax,eax
74 yy
je      default

 

改成

Opcode Bytes Instruction
B8 00 00 02 00
mov     eax,00020000h
90
nop
90
nop

 

即可。。。

 

个人试验了一次,果然可行,具体步骤如下:

1、首先复制系统内核文件 ntkrnlpa.exe,并命名为 ntkrn128.exe,所有修改都在ntkrn128.exe上面进行,不要动原来的内核

2、用16进制编辑器(我用的是ultraedit)查找特征码:

特征串1:7C 11 8B 45 FC 85 C0 74 0a
特征串2:7C 10 8B 45 FC 85 C0 74 09

每一个特征串都是唯一的,你只会找到一个。

然后就是修改,把 后面七个字节全部改为 B8 00 00 02 00 90 90

也就是:

特征串1:7C 11 8B 45 FC 85 C0 74 0a   改为 7C 11 B8 00 00 02 00 90 90
特征串2:7C 10 8B 45 FC 85 C0 74 09 改为 7C 10 B8 00 00 02 00 90 90

然后保存文件,退出编辑器。

3、改了内核文件,就需要重新生成md5验证码,某则不能启动的,用editbin,visual stuido 有,也可以从最下面提供的下载包里面获取。

editbin /release C:\windows\system32\ntkrn128.exe

4、对内核文件进行签名,这两个工具在 Windows Software Development Kit (SDK) and the Windows Driver Kit (WDK) 都有,也可以从下面的下载包里面获取。

makecert -r -ss my -n “CN=My Own Testing Authority”
signtool sign -s my -n “My Own Testing Authority” C:\windows\system32\ntkrn128.exe

5、增加启动项,由于vista不能直接修改boot.ini,只能用bcdedit来修改了

把当前启动项拷贝一份新的:

bcdedit /copy {current} /d “Windows Vista 128G”

获得新启动项的guid

直接敲 bcdedit

….

Windows 启动加载器
——————-
标识符              {24914868-264b-11de-a6f3-001aa0c54a80}
device                  partition=C:
path                    \Windows\system32\winload.exe
description             Windows Vista 128G

….

这样就找到标识符guid {24914868-264b-11de-a6f3-001aa0c54a80},每个系统的都是不同的,一定要用自己看到的。

强制打开pae

bcdedit /set {guid} pae ForceEnable

指定内核

bcdedit /set {guid} kernel ntkrn128.exe

 

打开测试签名:

bcdedit /set {guid} testsigning on

 

ok,搞定,这样子启动的时候就多了一个选项

Windows Vista 128G

选择以后启动,桌面显示测试模式,因为我们没有windows的签名,忍一下吧,嘿嘿。

到此我的4G内存全部用上了,而windows 6 最高支持128G内存,应该也是ok滴,哈哈。

不过用了这个修改版的内核,会有一些奇奇怪怪的蓝屏问题,估计是还有某些地方会检查所致吧。或者是我的rpwt。。。

修改内核用到的工具:

KernelTool.zip

Leave a Reply