From d50f7b02a953d1dc524a8f01c06036a90308ee8b Mon Sep 17 00:00:00 2001 From: Nikolay Sivov Date: Tue, 17 May 2022 22:20:38 +0300 Subject: [PATCH] winedump: Add support for ThreadInfoListStream stream. Signed-off-by: Nikolay Sivov Signed-off-by: Alexandre Julliard --- include/minidumpapiset.h | 21 +++++++++++++++++++++ tools/winedump/minidump.c | 31 +++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/include/minidumpapiset.h b/include/minidumpapiset.h index 73994c0d3eb..b3a7737bd13 100644 --- a/include/minidumpapiset.h +++ b/include/minidumpapiset.h @@ -405,6 +405,27 @@ typedef struct _MINIDUMP_HANDLE_DESCRIPTOR_2 ULONG32 Reserved0; } MINIDUMP_HANDLE_DESCRIPTOR_2, *PMINIDUMP_HANDLE_DESCRIPTOR_2; +typedef struct _MINIDUMP_THREAD_INFO +{ + ULONG32 ThreadId; + ULONG32 DumpFlags; + ULONG32 DumpError; + ULONG32 ExitStatus; + ULONG64 CreateTime; + ULONG64 ExitTime; + ULONG64 KernelTime; + ULONG64 UserTime; + ULONG64 StartAddress; + ULONG64 Affinity; +} MINIDUMP_THREAD_INFO, *PMINIDUMP_THREAD_INFO; + +typedef struct _MINIDUMP_THREAD_INFO_LIST +{ + ULONG SizeOfHeader; + ULONG SizeOfEntry; + ULONG NumberOfEntries; +} MINIDUMP_THREAD_INFO_LIST, *PMINIDUMP_THREAD_INFO_LIST; + typedef enum _MINIDUMP_STREAM_TYPE { UnusedStream = 0, diff --git a/tools/winedump/minidump.c b/tools/winedump/minidump.c index f8bd03ca0c5..734c754e6be 100644 --- a/tools/winedump/minidump.c +++ b/tools/winedump/minidump.c @@ -476,6 +476,37 @@ void mdmp_dump(void) } } break; + case ThreadInfoListStream: + { + const MINIDUMP_THREAD_INFO_LIST *til = stream; + const BYTE *desc; + + printf("Thread Info List:\n"); + printf(" SizeOfHeader: %u\n", (UINT)til->SizeOfHeader); + printf(" SizeOfEntry: %u\n", (UINT)til->SizeOfEntry); + printf(" NumberOfEntries: %u\n", (UINT)til->NumberOfEntries); + + desc = (BYTE *)til + sizeof(*til); + for (i = 0; i < til->NumberOfEntries; ++i) + { + const MINIDUMP_THREAD_INFO *ti = (void *)desc; + + printf(" Thread [%u]:\n", i); + printf(" ThreadId: %u\n", ti->ThreadId); + printf(" DumpFlags: %#x\n", ti->DumpFlags); + printf(" DumpError: %u\n", ti->DumpError); + printf(" ExitStatus: %u\n", ti->ExitStatus); + print_longlong(" CreateTime", ti->CreateTime); + print_longlong(" ExitTime", ti->ExitTime); + print_longlong(" KernelTime", ti->KernelTime); + print_longlong(" UserTime", ti->UserTime); + print_longlong(" StartAddress", ti->StartAddress); + print_longlong(" Affinity", ti->Affinity); + + desc += til->SizeOfEntry; + } + } + break; default: printf("NIY %d\n", dir->StreamType);