mirror of
https://github.com/momo5502/emulator.git
synced 2026-01-19 11:43:56 +00:00
Support ThreadTebInformation query
This commit is contained in:
@@ -80,3 +80,10 @@ typedef struct _THREAD_BASIC_INFORMATION64
|
||||
EMULATOR_CAST(std::uint32_t, KPRIORITY) Priority;
|
||||
EMULATOR_CAST(std::uint32_t, KPRIORITY) BasePriority;
|
||||
} THREAD_BASIC_INFORMATION64, *PTHREAD_BASIC_INFORMATION64;
|
||||
|
||||
typedef struct _THREAD_TEB_INFORMATION
|
||||
{
|
||||
EmulatorTraits<Emu64>::PVOID TebInformation; // Buffer to write data into.
|
||||
ULONG TebOffset; // Offset in TEB to begin reading from.
|
||||
ULONG BytesToRead; // Number of bytes to read.
|
||||
} THREAD_TEB_INFORMATION, *PTHREAD_TEB_INFORMATION;
|
||||
|
||||
@@ -1499,6 +1499,25 @@ namespace
|
||||
return STATUS_INVALID_HANDLE;
|
||||
}
|
||||
|
||||
if (info_class == ThreadTebInformation)
|
||||
{
|
||||
if (return_length)
|
||||
{
|
||||
return_length.write(sizeof(THREAD_TEB_INFORMATION));
|
||||
}
|
||||
|
||||
if (thread_information_length < sizeof(THREAD_TEB_INFORMATION))
|
||||
{
|
||||
return STATUS_BUFFER_OVERFLOW;
|
||||
}
|
||||
|
||||
const auto teb_info = c.emu.read_memory<THREAD_TEB_INFORMATION>(thread_information);
|
||||
const auto data = c.emu.read_memory(thread->teb->value() + teb_info.TebOffset, teb_info.BytesToRead);
|
||||
c.emu.write_memory(teb_info.TebInformation, data.data(), data.size());
|
||||
|
||||
return STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
if (info_class == ThreadBasicInformation)
|
||||
{
|
||||
if (return_length)
|
||||
@@ -2909,7 +2928,6 @@ namespace
|
||||
|
||||
return mode;
|
||||
}
|
||||
|
||||
std::optional<std::u16string_view> get_io_device_name(const std::u16string_view filename)
|
||||
{
|
||||
constexpr std::u16string_view device_prefix = u"\\Device\\";
|
||||
|
||||
Reference in New Issue
Block a user