diff --git a/src/windows-emulator/syscalls.cpp b/src/windows-emulator/syscalls.cpp index 98c2d45b..8999236d 100644 --- a/src/windows-emulator/syscalls.cpp +++ b/src/windows-emulator/syscalls.cpp @@ -1397,6 +1397,44 @@ namespace return STATUS_SUCCESS; } + if (info_class == ProcessDeviceMap) + { + c.win_emu.log.info("Handling ProcessDeviceMap request.\n"); + + if (return_length) + { + return_length.write(sizeof(EmulatorTraits::PVOID)); + } + + if (process_information_length != sizeof(EmulatorTraits::PVOID)) + { + return STATUS_BUFFER_OVERFLOW; + } + + const emulator_object::PVOID> info{c.emu, process_information}; + info.write(0); // NULL pointer + + return STATUS_SUCCESS; + } + + if (info_class == ProcessEnableAlignmentFaultFixup) + { + if (return_length) + { + return_length.write(sizeof(BOOLEAN)); + } + + if (process_information_length != sizeof(BOOLEAN)) + { + return STATUS_BUFFER_OVERFLOW; + } + + const emulator_object info{c.emu, process_information}; + info.write(FALSE); // Alignment fault fixup is disabled + + return STATUS_SUCCESS; + } + if (info_class == ProcessDebugObjectHandle) { if (return_length) @@ -1584,6 +1622,24 @@ namespace return STATUS_SUCCESS; } + if (info_class == ThreadTimes) + { + if (return_length) + { + return_length.write(sizeof(KERNEL_USER_TIMES)); + } + + if (thread_information_length != sizeof(KERNEL_USER_TIMES)) + { + return STATUS_BUFFER_OVERFLOW; + } + + const emulator_object info{c.emu, thread_information}; + info.write(KERNEL_USER_TIMES{}); + + return STATUS_SUCCESS; + } + c.win_emu.log.error("Unsupported thread query info class: %X\n", info_class); c.emu.stop();