diff --git a/src/common/platform/kernel_mapped.hpp b/src/common/platform/kernel_mapped.hpp index cc2303c8..5d7dcb85 100644 --- a/src/common/platform/kernel_mapped.hpp +++ b/src/common/platform/kernel_mapped.hpp @@ -215,6 +215,32 @@ union PEB_LEAP_SECONDS_FLAG_UNION }; }; +#define MAXIMUM_LEADBYTES 12 + +typedef struct _CPTABLEINFO +{ + USHORT CodePage; + USHORT MaximumCharacterSize; + USHORT DefaultChar; + USHORT UniDefaultChar; + USHORT TransDefaultChar; + USHORT TransUniDefaultChar; + USHORT DBCSCodePage; + UCHAR LeadByte[MAXIMUM_LEADBYTES]; + USHORT* MultiByteTable; + void* WideCharTable; + USHORT* DBCSRanges; + USHORT* DBCSOffsets; +} CPTABLEINFO, *PCPTABLEINFO; + +typedef struct _NLSTABLEINFO +{ + CPTABLEINFO OemTableInfo; + CPTABLEINFO AnsiTableInfo; + USHORT* UpperCaseTable; + USHORT* LowerCaseTable; +} NLSTABLEINFO, *PNLSTABLEINFO; + typedef struct _PEB64 { BOOLEAN InheritedAddressSpace; @@ -246,9 +272,9 @@ typedef struct _PEB64 EMULATOR_CAST(void*, PSILO_USER_SHARED_DATA) SharedData; // HotpatchInformation std::uint64_t** ReadOnlyStaticServerData; - std::uint64_t* AnsiCodePageData; // PCPTABLEINFO - std::uint64_t* OemCodePageData; // PCPTABLEINFO - std::uint64_t* UnicodeCaseTableData; // PNLSTABLEINFO + EMULATOR_CAST(EmulatorTraits::PVOID, PCPTABLEINFO) AnsiCodePageData; // PCPTABLEINFO + EMULATOR_CAST(EmulatorTraits::PVOID, PCPTABLEINFO) OemCodePageData; // PCPTABLEINFO + EMULATOR_CAST(EmulatorTraits::PVOID, PNLSTABLEINFO) UnicodeCaseTableData; // PNLSTABLEINFO ULONG NumberOfProcessors; ULONG NtGlobalFlag; diff --git a/src/windows-emulator/windows_emulator.cpp b/src/windows-emulator/windows_emulator.cpp index 115a87f7..52577ab1 100644 --- a/src/windows-emulator/windows_emulator.cpp +++ b/src/windows-emulator/windows_emulator.cpp @@ -266,6 +266,10 @@ namespace peb.OSPlatformId = 2; peb.OSMajorVersion = 0x0000000a; peb.OSBuildNumber = 0x00006c51; + + peb.AnsiCodePageData = allocator.reserve().value(); + peb.OemCodePageData = allocator.reserve().value(); + peb.UnicodeCaseTableData = allocator.reserve().value(); }); }