From 2695fa0cd84ecc158eb87a3ebcd4365c14aaaf19 Mon Sep 17 00:00:00 2001 From: momo5502 Date: Sun, 22 Dec 2024 09:32:11 +0100 Subject: [PATCH] Prepare mutex support --- src/windows-emulator/handles.hpp | 2 ++ src/windows-emulator/syscalls.cpp | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/windows-emulator/handles.hpp b/src/windows-emulator/handles.hpp index 8d1335c5..e601af51 100644 --- a/src/windows-emulator/handles.hpp +++ b/src/windows-emulator/handles.hpp @@ -337,6 +337,8 @@ private: }; constexpr auto KNOWN_DLLS_DIRECTORY = make_pseudo_handle(0x1, handle_types::directory); +constexpr auto BASE_NAMED_OBJECTS_DIRECTORY = make_pseudo_handle(0x2, handle_types::directory); + constexpr auto KNOWN_DLLS_SYMLINK = make_pseudo_handle(0x1, handle_types::symlink); constexpr auto SHARED_SECTION = make_pseudo_handle(0x1, handle_types::section); diff --git a/src/windows-emulator/syscalls.cpp b/src/windows-emulator/syscalls.cpp index 1ea064de..c8e5e6fa 100644 --- a/src/windows-emulator/syscalls.cpp +++ b/src/windows-emulator/syscalls.cpp @@ -548,13 +548,20 @@ namespace }); - const emulator_object sysdir_obj{c.emu, obj_address + windir_obj.size()}; + const emulator_object sysdir_obj{c.emu, windir_obj.value() + windir_obj.size()}; sysdir_obj.access([&](UNICODE_STRING& ucs) { c.proc.base_allocator.make_unicode_string(ucs, L"C:\\WINDOWS\\System32"); ucs.Buffer = reinterpret_cast(reinterpret_cast(ucs.Buffer) - obj_address); }); + const emulator_object base_dir_obj{c.emu, sysdir_obj.value() + sysdir_obj.size()}; + base_dir_obj.access([&](UNICODE_STRING& ucs) + { + c.proc.base_allocator.make_unicode_string(ucs, L"\\Sessions\\1\\BaseNamedObjects"); + ucs.Buffer = reinterpret_cast(reinterpret_cast(ucs.Buffer) - obj_address); + }); + if (view_size) { view_size.write(shared_section_size); @@ -1561,6 +1568,12 @@ namespace return STATUS_SUCCESS; } + if (object_name == L"\\Sessions\\1\\BaseNamedObjects") + { + directory_handle.write(BASE_NAMED_OBJECTS_DIRECTORY); + return STATUS_SUCCESS; + } + return STATUS_NOT_SUPPORTED; }