Ok, now for something new. Sadly doesnt seem to be much interest for x64 ACPIs. I started using it back in 2005, so I broke away from 16bit applications long time ago. I didnt actually use XP, I went from 2000 to XP64. Anyways...
I'll start by saying I have no idea about patching ACPIs. I have no idea what each specific patch was made for. I dont know how to debug errors from ACPI. In the words of Mov AX, 0xDEAD, blindly turning off checks is not always the best idea. All I've done was compare the latest x86 5048 acpi (which worked on my ryzen), and tried to match existing patches and missing patches based on any calls or values by patterns and general structure/flow in IDA Free on the x64 5048. Some I feel confident I found the right one, others are reasonable, and one that is a total guess as it had nothing guess from. Feel free to open IDA and see for yourself.
5048 x86 "2020.10.24 - daniel_k, diderius6", all patches below are based on compare to original unpatched / patched file
=Matched in x64
@27a80 00 00 00 -> A8 97 03
@27c58 28 92 03 -> 00 00 00
=Matched in x64
@d443 75 -> EB
=MaybeMatch in x64
@15f15 8B F7 -> 89 FF
-ex1 to x64
@283d6 7D -> EB
-ex2 to x64
@d2b0 74 -> EB
-exClose1 to x64
@f7e1 74 -> EB
-exClose2 to x64
@4511 0F 84 39 01 00 00 -> E9 3A 01 00 00 90
-experiNotSure1 to x64
@317ac 75 -> EB
@317c5 21 -> 00
5048 x64 "2019.6.30 (Ryzen) - diderius6"
=Matched from x86
@4ae40 00 00 00 -> B8 C8 05
@4b1f0 18 BF 05 -> 00 00 00
=Matched from x86
@18ca4 0A -> 00
=MaybeMatch from x86
@26337 08 00 14 C0 -> 00 00 00 00
@26429 74 -> EB
--end of origial 2019.06.30 patch
----------------------EXPERIMENT---------everything below this is untested guess from x86
-experi1
test @51bf1 79 -> EB
-experi2
test @198dc 0F 84 7F -> E9 80 00
-experiClose1
test @1c666 74 -> EB
-experiClose2
test @9638 0F 84 A8 01 00 00 -> E9 A9 01 00 00 90
-experiNotSure1
test @5fa63 74 -> EB
test @5fa94 78 -> 00
experi1
in subroutine that has \\_S1,2,3,4,5 in the beginning
shorty before the end, block just after a ZwPowerInformation and 2 ExFreePoolWithTag, x86 stop jump to 2001, 0A5, call: extern KeBugCheckEx:Dword
so we do same, stop jump to __stdcall __noreturn extern KeBugCheckEx:qword
===========
experi2
in function shortly after x64@18ca4,x86@d443 with 58080206h,4449485Fh push/mov, PNP0C0F is jumped so that it doesnt get to a 5349445Fh, which then goes to 10006h,0A5h ds:keBugCheckEx
x64 version has a lot more paths to 0A5h, but same one jump to get away, good idea? I dont know.
Another learning experience. This one I used the same E9 jump as from expericlose2, but this time I just tried with my own guess for the offset. I ended up with a bit longer jump then I wanted so I guess my math wasnt exactly correct, but was able to get it there eventually.
===========
experiClose1
similar structure, compares 0FFFFFFFFh has 2 KeBugCheckEx, and ends with ExFreePoolWithTag
first KeBugCheckEx is left alone, goes straight from head to bugcheck, other one near end is the one that is jumped out
===========
experiClose2
similar structure, 4449555Fh,0Dh,0A5h to KeBugCheckEx at end, mentions 800h vs 80000000000h and 0A000h vs 0A00000000000h between x86 and x64
on x86 jumped to "retn" block,
This one was a learning experience. Using the same E9 3A 01 landed in the wrong spot. Makes sense after looking up E9 (JMP) is based on offset distance entered. On the x64 where you want to go wasnt in the same spot. So used IDA free in text mode to see where the text jump landed with the wrong value from x86, in hex calculated the difference on how much further was needed, then added it to the JMP. So 31 01 (aka in hex calculator 0131 + 6F = 01A9), so A9 01.
===========
experiNotSure1
not much to guess with, short subroutine, 2 KeBugCheckEx to avoid, total guess on this one
Update
https://www.mediafire.com/file/ietiycbz6eueacz/xp64_acpi5048_2022.04.12.rar/file