I have this old Win7 32-bit laptop with 4 GB of RAM, but it was only able to use about 2.9 GB, the rest was "reserved for hardware". Recently I came across an interesting article by Raymond.CC "Make Windows 7, 8 and Vista 32-bit (x86) Support More Than 4GB Memory" and PatchPae2 by Wen Jia Liu aka wj32, which should enable PAE up to 128 GB for all current 32-bit Windows versions.
However, the patch of my current Windows 7 SP1
winload.exe version 6.1.7601.23569 failed, so I fixed it.
The result: PatchPae2.exe
Source and install instructions
I looked into wj32's code and disassembled my
winload.exe. Apparently it has changed in revision 23569. The original patch was for
ImgpLoadPEImage, but I decided it would be more robust to patch the end of
ImgpValidateImageHash. The offsets may change, but it is probably easier to maintain, as the error code
C0000428h should stay constant.
.text:004295F7 loc_4295F7: ; CODE XREF: ImgpValidateImageHash(x,x,x,x,x)+EFj .text:004295F7 C7 44 24 18 28 04 00 C0 ; ImgpValidateImageHash(x,x,x,x,x)+105j ... .text:004295F7 mov [esp+70h+var_58], 0C0000428h ; critical service failed .text:004295FF .text:004295FF loc_4295FF: ; CODE XREF: ImgpValidateImageHash(x,x,x,x,x)+1Dj .text:004295FF 8B 44 24 18 ; ImgpValidateImageHash(x,x,x,x,x)+A6j ... .text:004295FF mov eax, [esp+70h+var_58] ; => patch to xor eax, eax; nop; nop
I took inspiration and revision check from Elbandi. The source and executable are on github. I built it with Visual Studio 2017 Community Edition along with the great Process Hacker.
My laptop is 8 years old HP 6730b, very solid, supports x64 and PAE (Physical Address Extension), but will not run Windows 10 without ugly graphic driver issues. Still it has at least 2 years of future, until Microsoft ceases to support Windows 7. I do not feel like switching to 64 bits. PatchPae works like a charm, no issues so far, using current Intel HD drivers.
You need to be aware, that the checksum verification of both loader and kernel is disabled when the patch is active. On the other hand, you can flexibly disable it per boot menu or remove it permanently from there with
As Satoshi64 pointed out, Microsoft updated
winload.exe to 6.1.7601.23992. I didn't realize that, my patched loader was loading the patched kernel without any problems. I updated them both, everything seems to work fine again. The patch was still ok, I just needed to open up the version check. I updated the code on the Github and PatchPae2.exe.
Meanwhile I found a way around the graphic glitches, got myself a new SSD and moved on to Windows 10 x64.