| 818 | |
| 819 | |
| 820 | BOOLEAN LOADER_ENTRY::PatchCPUID(const UINT8* Location, INT32 LenLoc, |
| 821 | const UINT8* Search4, const UINT8* Search10, const UINT8* ReplaceModel, |
| 822 | const UINT8* ReplaceExt, INT32 Len) |
| 823 | { |
| 824 | INT32 patchLocation=0, patchLocation1=0; |
| 825 | INT32 Adr = 0, Num; |
| 826 | BOOLEAN Patched = FALSE; |
| 827 | UINT8 FakeModel = (KernelAndKextPatches.FakeCPUID >> 4) & 0x0f; |
| 828 | UINT8 FakeExt = (KernelAndKextPatches.FakeCPUID >> 0x10) & 0x0f; |
| 829 | for (Num = 0; Num < 2; Num++) { |
| 830 | Adr = FindBin(&KernelData[Adr], 0x800000 - Adr, Location, (UINT32)LenLoc); |
| 831 | if (Adr < 0) { |
| 832 | break; |
| 833 | } |
| 834 | DBG_RT( "found location at %x\n", Adr); |
| 835 | patchLocation = FindBin(&KernelData[Adr], 0x100, Search4, (UINT32)Len); |
| 836 | if (patchLocation > 0 && patchLocation < 70) { |
| 837 | //found |
| 838 | DBG_RT( "found Model location at %x\n", Adr + patchLocation); |
| 839 | CopyMem(&KernelData[Adr + patchLocation], ReplaceModel, Len); |
| 840 | KernelData[Adr + patchLocation + 1] = FakeModel; |
| 841 | patchLocation1 = FindBin(&KernelData[Adr], 0x100, Search10, (UINT32)Len); |
| 842 | if (patchLocation1 > 0 && patchLocation1 < 100) { |
| 843 | DBG_RT( "found ExtModel location at %x\n", Adr + patchLocation1); |
| 844 | CopyMem(&KernelData[Adr + patchLocation1], ReplaceExt, Len); |
| 845 | KernelData[Adr + patchLocation1 + 1] = FakeExt; |
| 846 | } |
| 847 | Patched = TRUE; |
| 848 | } |
| 849 | } |
| 850 | return Patched; |
| 851 | } |
| 852 | |
| 853 | VOID LOADER_ENTRY::KernelCPUIDPatch() |
| 854 | { |