Eric Pouech : dbghelp: Store the PE version information in module block.

Alexandre Julliard julliard at winehq.org
Mon Feb 4 08:42:56 CST 2008


Module: wine
Branch: master
Commit: 7b81ea47c626c79814f97c0d193d1424199a9be6
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=7b81ea47c626c79814f97c0d193d1424199a9be6

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Sun Jan 27 19:04:17 2008 +0100

dbghelp: Store the PE version information in module block.

---

 dlls/dbghelp/Makefile.in |    1 +
 dlls/dbghelp/minidump.c  |   24 +++++++++++++++++++++++-
 2 files changed, 24 insertions(+), 1 deletions(-)

diff --git a/dlls/dbghelp/Makefile.in b/dlls/dbghelp/Makefile.in
index 280e199..fa94a1f 100644
--- a/dlls/dbghelp/Makefile.in
+++ b/dlls/dbghelp/Makefile.in
@@ -5,6 +5,7 @@ VPATH     = @srcdir@
 MODULE    = dbghelp.dll
 IMPORTLIB = libdbghelp.$(IMPLIBEXT)
 IMPORTS   = psapi kernel32 ntdll
+DELAYIMPORTS = version
 
 C_SRCS = \
 	coff.c \
diff --git a/dlls/dbghelp/minidump.c b/dlls/dbghelp/minidump.c
index d532217..4eec39f 100644
--- a/dlls/dbghelp/minidump.c
+++ b/dlls/dbghelp/minidump.c
@@ -329,6 +329,28 @@ static void fetch_modules_info(struct dump_context* dc)
     elf_enum_modules(dc->hProcess, fetch_elf_module_info_cb, dc);
 }
 
+static void fetch_module_versioninfo(LPCWSTR filename, VS_FIXEDFILEINFO* ffi)
+{
+    DWORD       handle;
+    DWORD       sz;
+    static const WCHAR backslashW[] = {'\\', '\0'};
+
+    memset(ffi, 0, sizeof(*ffi));
+    if ((sz = GetFileVersionInfoSizeW(filename, &handle)))
+    {
+        void*   info = HeapAlloc(GetProcessHeap(), 0, sz);
+        if (info && GetFileVersionInfoW(filename, handle, sz, info))
+        {
+            VS_FIXEDFILEINFO*   ptr;
+            UINT    len;
+
+            if (VerQueryValueW(info, backslashW, (void*)&ptr, &len))
+                memcpy(ffi, ptr, min(len, sizeof(*ffi)));
+        }
+        HeapFree(GetProcessHeap(), 0, info);
+    }
+}
+
 /******************************************************************
  *		add_memory_block
  *
@@ -515,7 +537,7 @@ static  unsigned        dump_modules(struct dump_context* dc, BOOL dump_elf)
             mdModule.ModuleNameRva = dc->rva;
             ms->Length -= sizeof(WCHAR);
             append(dc, ms, sizeof(ULONG) + ms->Length + sizeof(WCHAR));
-            memset(&mdModule.VersionInfo, 0, sizeof(mdModule.VersionInfo)); /* FIXME */
+            fetch_module_versioninfo(ms->Buffer, &mdModule.VersionInfo);
             mdModule.CvRecord.DataSize = 0; /* FIXME */
             mdModule.CvRecord.Rva = 0; /* FIXME */
             mdModule.MiscRecord.DataSize = 0; /* FIXME */




More information about the wine-cvs mailing list