[32Bit or x86] Use more memory above 3.25GB

24 posts in this topic


Thats a real nasty and error prone solution...

Agree (with XP) but what about Win7 and Vista??? Its a patch and gets the job done smile.gif

I know it's an old thread but I somewhat disagree with Kelsenellenelvian's opinion. The solution is exactly the same in case of both XP and Vista/7. You just remove the artificial limitation imposed by M$ about how much RAM the system is able to use with PAE enabled. I don't see anything nasty in it :w00t:

You can know that it's 100% artificial just by looking at Windows 2000 kernel files which are exactly the same in case of all different editions. The only difference is in the registry - when it's set to Professional you can use only 4GB of RAM, when it's set to Advanced Server you can use 8GB, and when it's set to Datacenter Server then you can use 32GB. There's no difference in the system files themselves. In case of Windows 2000 the situation is similar when it comes to how many CPUs / cores the system will use as the number differs according to the Windows 2000 edition you're using. blackwingcat has removed those limitations in his patches, and that's why you can use more RAM and utilise more CPUs / cores with his kernel installed.

I'm experimenting with XP at the moment and you can remove the max amount of RAM limitation by editing the kernel files. There's a problem though that the system default USB driver doesn't work after doing that. However, there's a way to work around it. 3rd party USB drivers do work which means that you can still use USB 3.0 so (as long as your PC has USB 3.0 ports) you can just use it for all USB devices and leave USB1.1/2.0 ports unused.

For 64Bit users, its best you remain there and new users should be encouraged for X64 anyways biggrin.gif

X64 may be "the future", trendy, jazzy, etc. but the real problem is that a lot of older hardware simply don't work in 64-bit systems due to lack of proper drivers. I'm definitely not going to throw away a perfectly working printer and scanner simply because they're not supported by the new OS -_-


Share this post

Link to post
Share on other sites

@MagicAndre1981: Great find! :yes:

For the record, for XP, there's a further problem because MS's crippled the hal, starting from SP2. So, for a patch to be useful, someone'd have to backport to the SP3 hal what has been removed from SP1. The main reference for this is daNIL (Galimov): read his replies to this blog entry, starting in 2009.

Until this is solved, PAE aware ramdisks are the most reliable solution, IMO.


Share this post

Link to post
Share on other sites

I've read the blog. You can use more RAM just by patching the kernel file. I don't know whether the older HAL fixes the USB driver problem because in my case it just doesn't work. Trying to use HAL from SP1a causes infinite reboot loop.

Ramdisks have different use :rolleyes: I like to split the RAM so that I can have 5GB for the OS and 3GB for a ramdisk. That's what I did in Windows 2000 and I'm trying to do now in XP. And yes, there are situations where running several programs at once or just one multi-threaded application can use all of the available 5GB RAM.

Edited by tomasz86

Share this post

Link to post
Share on other sites

I know you know what you do. But so does daNIL. He was the one who 1st decided to provide the > 4 GiB address patch for XP.
He gave up because of the problems with HAL.DLL. So that's definitive for me, and the issue with USB may be just the tip of the proverbial iceberg.
So, with all due respect, forgive me for asking but, are you *sure* you used the right HAL from SP1? Remember there are actually at least 5 varieties of hal for XP, and the one selected gets renamed (actually copied to) HAL.DLL. Now, while the file name changes to hal.dll, the original filename in the properties tab remains untouched, so that, by looking at it you may find the original name of hal.dll. The definitive reference on the main builds of hall.dll is this, of course, but it does not cover the security updates and hotfixes. What you describe makes me think you picked the wrong hall.dll to start with. Of course, I may be wrong. But there's no harm in double checking, so please do it.


Share this post

Link to post
Share on other sites

It seems to me that by the so called HAL problems he means exactly the USB driver issue, i.e. that with HAL from SP1 the USB driver worked:

you need to extract halmacpi.dll from XP SP1 distributive to system32 folder, and modify/add the boot.ini menu to include it like this

multi(0)disk(0)rdisk(0)partition(1)\WINNT=Windows XP Professional patched halsp1″ /pae /fastdetect /kernel=ntkrnlp2.exe /hal=halmacpi.dll

Not sure which hal.dll youre using, but it works ok on my pc, usb drives and DMA are working.

It seems that it was someone from China to mention the patch for the first time. At least here is the oldest entry from Google about it:

As for the HAL itself, here is a good M$ article about it:

How to Troubleshoot Windows 2000 Hardware Abstraction Layer Issues

386 source file: i386\\halmacpi.dll

Computer type: ACPI Multiprocessor PC

i386 source file: i386\\halaacpi.dll

Computer type: ACPI Uniprocessor PC

i386 source file: i386\\halacpi.dll

Computer type: Advanced Configuration and Power Interface (ACPI) PC

i386 source file: *i386\\halsp.dll

Computer type: Compaq SystemPro Multiprocessor or 100% Compatible

i386 source file: *i386\\halapic.dll

Computer type: MPS Uniprocessor PC

i386 source file: *i386\\halmps.dll

Computer type: MPS Multiprocessor PC

i386 source file: *i386\\hal.dll

Computer type: Standard PC

i386 source file: *i386\\halborg.dll

Computer type: SGI mp

Copy to this folder: winnt\System32

Rename to this file name: hal.dll

I'm sure I tried to use the correct one which is halmacpi.dll (ACPI Multiprocessor PC) in my case. Of course I'm going to do more trials in the future.

At the moment I don't see any other issues except for the USB driver problem. I used PAE in Windows 2000 for a few years so I know more or less what to expect. Still more time is needed to check for everything.

Edited by tomasz86

Share this post

Link to post
Share on other sites

This may be relevant:

@TELVM: Many thanks to you for pointing into the right direction with the link! Much appreciated!!!

I tested it on XP SP3 with the hal.dll from XP SP1 and it worked. Be careful I have not done a lot of tests, but connecting a USB stick worked.
Be advised that the link patches another location very near my patching location. But in my opinion the patch from the link only enables up to 16 GB RAM instead of mine which should enable 64 GB RAM.

For XP SP3 we patch the following offset in ntkrpamp.exe which enables all available RAM up to 64 GB:
- WinDbg "bp nt!MiPagesInLoaderBlock+0x5d" from
e0d73851 751b jne nt!MiPagesInLoaderBlock+0x7a (e0d7386e)
e0d73851 90 nop
e0d73852 90 nop
- IDA from
INIT:005D0851 jnz short loc_5D086E
INIT:005D0851 nop
INIT:005D0852 nop
- hex editor offset 0x1B2A51 from
75 1B
90 90

After ntkrpamp.exe is changed we have to do the following to replace the original kernel file:
- correct the checksum of ntkrpamp.exe with LordPE
- add /PAE switch to boot.ini
Do not omit this step otherwise we can not address the full RAM! This is necessary, because
we will use hal.dll from XP SP1.
- replace the original kernel file by the patched one:
- rename the file "C:\Windows\Driver Cache\i386\" to "driver.cab_"
- rename the file "C:\Windows\Driver Cache\i386\" to "sp3.cab_"
- rename the file "C:\Windows\system32\ntkrnlpa.exe" to "ntkrnlpa.exe_"
- cancel the "Windows File Protection" message box and choose "Yes"
- copy the patched file ntkrpamp.exe to "C:\Windows\system32\ntkrnlpa.exe"
- cancel the "Windows File Protection" message box and choose "Yes"
- rename the file "C:\Windows\system32\hal.dll" to "hal.dll_"
- copy hal.dll from XP SP1 (internal file name halmacpi.dll) to "C:\Windows\system32\hal.dll"
- do not forget to add the boot.ini switch /PAE, otherwise we can not address the full RAM,
because we use hal.dll from XP SP1
- reboot

Again many thanks to TELVM for clearing things up!

Reference: Windows XP Ram Limit posts #17 and 22 to the end.

Obs: 0x1B2A51 for 5.1.2600.5512 becomes 0x1B3A51 for 5.1.2600.6387...


Share this post

Link to post
Share on other sites

Thanks, dencorso :) It's very useful finding. I haven't done any more tests yet so can't tell more about the details so far, but:

But in my opinion the patch from the link only enables up to 16 GB RAM instead of mine which should enable 64 GB RAM.

This is because in the other patch ntkrnlpa.exe is hex edited like this:


Original : BB 00 00 10 00 33 FF 6A 07 8B F0
Modify To : BB 00 00 40 00 33 FF 6A 07 8B F0

(1000 is the Hex of 4096)
(4000 is the Hex of 16384)

If you set it to 4000 then it's no surprise that the maximum amount of RAM gets set to 16GB. You could probably experiment with other values. I've got only 8GB of RAM here so can't test anything more than this myself.

Edited by tomasz86

Share this post

Link to post
Share on other sites

Interesting thread, I made the jump to W7Ux32 on my birthday(legacy h/w,no 64 bit drivers) and if Resource Monitor is to be believed,

the upper gig of my new 4GiB build is being used by BIOS and hardware I'm happy with that and have enough faith in the construction

of the ADATA 60GiB SSD not to worry about it.

Am I living in a fools paradise?



Share this post

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Recently Browsing   0 members

    No registered users viewing this page.