From 91c7ce43a11dfbae173bac8b7dba7ba53897b851 Mon Sep 17 00:00:00 2001 From: Maurice Heumann Date: Mon, 14 Apr 2025 15:03:16 +0200 Subject: [PATCH] Fix reading unicode strings --- src/windows-emulator/emulator_utils.hpp | 2 +- src/windows-emulator/syscalls/event.cpp | 8 +++----- src/windows-emulator/syscalls/file.cpp | 9 +++------ src/windows-emulator/syscalls/registry.cpp | 5 ++--- src/windows-emulator/syscalls/section.cpp | 6 ++---- src/windows-emulator/syscalls/semaphore.cpp | 5 ++--- 6 files changed, 13 insertions(+), 22 deletions(-) diff --git a/src/windows-emulator/emulator_utils.hpp b/src/windows-emulator/emulator_utils.hpp index ef7b9459..ba0932be 100644 --- a/src/windows-emulator/emulator_utils.hpp +++ b/src/windows-emulator/emulator_utils.hpp @@ -352,7 +352,7 @@ inline std::u16string read_unicode_string(const emulator& emu, return read_unicode_string(emu, ucs); } -inline std::u16string read_unicode_string(emulator& emu, const UNICODE_STRING>* uc_string) +inline std::u16string read_unicode_string(emulator& emu, const uint64_t uc_string) { return read_unicode_string(emu, emulator_object>>{emu, uc_string}); } diff --git a/src/windows-emulator/syscalls/event.cpp b/src/windows-emulator/syscalls/event.cpp index 64aa329a..2f1f90fd 100644 --- a/src/windows-emulator/syscalls/event.cpp +++ b/src/windows-emulator/syscalls/event.cpp @@ -62,8 +62,7 @@ namespace syscalls const auto attributes = object_attributes.read(); if (attributes.ObjectName) { - name = read_unicode_string( - c.emu, reinterpret_cast>*>(attributes.ObjectName)); + name = read_unicode_string(c.emu, attributes.ObjectName); } } @@ -99,8 +98,7 @@ namespace syscalls const emulator_object>> object_attributes) { const auto attributes = object_attributes.read(); - const auto name = - read_unicode_string(c.emu, reinterpret_cast>*>(attributes.ObjectName)); + const auto name = read_unicode_string(c.emu, attributes.ObjectName); c.win_emu.log.print(color::dark_gray, "--> Event name: %s\n", u16_to_u8(name).c_str()); if (name == u"\\KernelObjects\\SystemErrorPortReady") @@ -133,4 +131,4 @@ namespace syscalls return STATUS_NOT_FOUND; } -} \ No newline at end of file +} diff --git a/src/windows-emulator/syscalls/file.cpp b/src/windows-emulator/syscalls/file.cpp index 8b291a22..006e3ba2 100644 --- a/src/windows-emulator/syscalls/file.cpp +++ b/src/windows-emulator/syscalls/file.cpp @@ -552,8 +552,7 @@ namespace syscalls uint64_t ea_buffer, ULONG ea_length) { const auto attributes = object_attributes.read(); - auto filename = - read_unicode_string(c.emu, reinterpret_cast>*>(attributes.ObjectName)); + auto filename = read_unicode_string(c.emu, attributes.ObjectName); auto printer = utils::finally([&] { c.win_emu.log.print(color::dark_gray, "--> Opening file: %s\n", u16_to_u8(filename).c_str()); // @@ -757,8 +756,7 @@ namespace syscalls const emulator_object>> object_attributes) { const auto attributes = object_attributes.read(); - const auto object_name = - read_unicode_string(c.emu, reinterpret_cast>*>(attributes.ObjectName)); + const auto object_name = read_unicode_string(c.emu, attributes.ObjectName); if (object_name == u"\\KnownDlls") { @@ -780,8 +778,7 @@ namespace syscalls const emulator_object>> object_attributes) { const auto attributes = object_attributes.read(); - const auto object_name = - read_unicode_string(c.emu, reinterpret_cast>*>(attributes.ObjectName)); + const auto object_name = read_unicode_string(c.emu, attributes.ObjectName); if (object_name == u"KnownDllPath") { diff --git a/src/windows-emulator/syscalls/registry.cpp b/src/windows-emulator/syscalls/registry.cpp index 2dcaf779..d383335a 100644 --- a/src/windows-emulator/syscalls/registry.cpp +++ b/src/windows-emulator/syscalls/registry.cpp @@ -11,8 +11,7 @@ namespace syscalls const emulator_object>> object_attributes) { const auto attributes = object_attributes.read(); - auto key = - read_unicode_string(c.emu, reinterpret_cast>*>(attributes.ObjectName)); + auto key = read_unicode_string(c.emu, attributes.ObjectName); if (attributes.RootDirectory) { @@ -247,4 +246,4 @@ namespace syscalls { return STATUS_NOT_SUPPORTED; } -} \ No newline at end of file +} diff --git a/src/windows-emulator/syscalls/section.cpp b/src/windows-emulator/syscalls/section.cpp index fab75901..3bcaaa90 100644 --- a/src/windows-emulator/syscalls/section.cpp +++ b/src/windows-emulator/syscalls/section.cpp @@ -29,8 +29,7 @@ namespace syscalls const auto attributes = object_attributes.read(); if (attributes.ObjectName) { - auto name = read_unicode_string( - c.emu, reinterpret_cast>*>(attributes.ObjectName)); + auto name = read_unicode_string(c.emu, attributes.ObjectName); c.win_emu.log.print(color::dark_gray, "--> Section with name %s\n", u16_to_u8(name).c_str()); s.name = std::move(name); } @@ -60,8 +59,7 @@ namespace syscalls { const auto attributes = object_attributes.read(); - auto filename = - read_unicode_string(c.emu, reinterpret_cast>*>(attributes.ObjectName)); + auto filename = read_unicode_string(c.emu, attributes.ObjectName); c.win_emu.log.print(color::dark_gray, "--> Opening section: %s\n", u16_to_u8(filename).c_str()); if (filename == u"\\Windows\\SharedSection") diff --git a/src/windows-emulator/syscalls/semaphore.cpp b/src/windows-emulator/syscalls/semaphore.cpp index 6b482a17..8e27e607 100644 --- a/src/windows-emulator/syscalls/semaphore.cpp +++ b/src/windows-emulator/syscalls/semaphore.cpp @@ -78,8 +78,7 @@ namespace syscalls const auto attributes = object_attributes.read(); if (attributes.ObjectName) { - s.name = read_unicode_string( - c.emu, reinterpret_cast>*>(attributes.ObjectName)); + s.name = read_unicode_string(c.emu, attributes.ObjectName); } } @@ -101,4 +100,4 @@ namespace syscalls return STATUS_SUCCESS; } -} \ No newline at end of file +}