Andrey Turkin : dbghelp: Implement ImageDirectoryEntryToDataEx.
Alexandre Julliard
julliard at winehq.org
Fri Jan 11 07:20:32 CST 2008
Module: wine
Branch: master
Commit: 9e2c76c6d454078932079f0d41b71486c590d3bc
URL: http://source.winehq.org/git/wine.git/?a=commit;h=9e2c76c6d454078932079f0d41b71486c590d3bc
Author: Andrey Turkin <andrey.turkin at gmail.com>
Date: Fri Jan 11 15:42:17 2008 +0300
dbghelp: Implement ImageDirectoryEntryToDataEx.
---
dlls/dbghelp/dbghelp.spec | 4 +-
dlls/dbghelp/pe_module.c | 50 +++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 52 insertions(+), 2 deletions(-)
diff --git a/dlls/dbghelp/dbghelp.spec b/dlls/dbghelp/dbghelp.spec
index b023f3d..d29b880 100644
--- a/dlls/dbghelp/dbghelp.spec
+++ b/dlls/dbghelp/dbghelp.spec
@@ -15,8 +15,8 @@
@ stub FindFileInPath
@ stub FindFileInSearchPath
@ stdcall GetTimestampForLoadedLibrary(long)
-@ stdcall ImageDirectoryEntryToData(ptr long long ptr) ntdll.RtlImageDirectoryEntryToData
-@ stub ImageDirectoryEntryToDataEx
+@ stdcall ImageDirectoryEntryToData(ptr long long ptr)
+@ stdcall ImageDirectoryEntryToDataEx(ptr long long ptr ptr)
@ stdcall ImageNtHeader(ptr) ntdll.RtlImageNtHeader
@ stdcall ImageRvaToSection(ptr ptr long) ntdll.RtlImageRvaToSection
@ stdcall ImageRvaToVa(ptr ptr long ptr) ntdll.RtlImageRvaToVa
diff --git a/dlls/dbghelp/pe_module.c b/dlls/dbghelp/pe_module.c
index 3027f5b..6676f29 100644
--- a/dlls/dbghelp/pe_module.c
+++ b/dlls/dbghelp/pe_module.c
@@ -417,3 +417,53 @@ struct module* pe_load_builtin_module(struct process* pcs, const WCHAR* name,
}
return module;
}
+
+/***********************************************************************
+ * ImageDirectoryEntryToDataEx (DBGHELP.@)
+ *
+ * Search for specified directory in PE image
+ *
+ * PARAMS
+ *
+ * base [in] Image base address
+ * image [in] TRUE - image has been loaded by loader, FALSE - raw file image
+ * dir [in] Target directory index
+ * size [out] Receives directory size
+ * section [out] Receives pointer to section header of section containing directory data
+ *
+ * RETURNS
+ * Success: pointer to directory data
+ * Failure: NULL
+ *
+ */
+PVOID WINAPI ImageDirectoryEntryToDataEx( PVOID base, BOOLEAN image, USHORT dir, PULONG size, PIMAGE_SECTION_HEADER *section )
+{
+ const IMAGE_NT_HEADERS *nt;
+ DWORD addr;
+
+ *size = 0;
+
+ if (!(nt = RtlImageNtHeader( base ))) return NULL;
+ if (dir >= nt->OptionalHeader.NumberOfRvaAndSizes) return NULL;
+ if (!(addr = nt->OptionalHeader.DataDirectory[dir].VirtualAddress)) return NULL;
+
+ *size = nt->OptionalHeader.DataDirectory[dir].Size;
+ if (image || addr < nt->OptionalHeader.SizeOfHeaders)
+ {
+ if (*section) *section = NULL;
+ return (char *)base + addr;
+ }
+
+ return RtlImageRvaToVa( nt, (HMODULE)base, addr, section );
+}
+
+/***********************************************************************
+ * ImageDirectoryEntryToData (DBGHELP.@)
+ *
+ * NOTES
+ * See ImageDirectoryEntryToDataEx
+ */
+PVOID WINAPI ImageDirectoryEntryToData( PVOID base, BOOLEAN image, USHORT dir, PULONG size )
+{
+ return ImageDirectoryEntryToDataEx( base, image, dir, size, NULL );
+}
More information about the wine-cvs
mailing list