Started the implementation of IMAGEHLP.DLL.
diff --git a/dlls/imagehlp/.cvsignore b/dlls/imagehlp/.cvsignore
new file mode 100644
index 0000000..f3c7a7c
--- /dev/null
+++ b/dlls/imagehlp/.cvsignore
@@ -0,0 +1 @@
+Makefile
diff --git a/dlls/imagehlp/Makefile.in b/dlls/imagehlp/Makefile.in
new file mode 100644
index 0000000..702647d
--- /dev/null
+++ b/dlls/imagehlp/Makefile.in
@@ -0,0 +1,22 @@
+DEFS = @DLLFLAGS@ -D__WINE__
+TOPSRCDIR = @top_srcdir@
+TOPOBJDIR = ../..
+SRCDIR = @srcdir@
+VPATH = @srcdir@
+MODULE = imagehlp
+
+C_SRCS = \
+ access.c \
+ debug.c \
+ imagehlp_main.c \
+ integrity.c \
+ internal.c \
+ modify.c \
+ symbol.c
+
+all: $(MODULE).o
+
+@MAKE_RULES@
+
+### Dependencies:
+
diff --git a/dlls/imagehlp/access.c b/dlls/imagehlp/access.c
new file mode 100644
index 0000000..d9c4064
--- /dev/null
+++ b/dlls/imagehlp/access.c
@@ -0,0 +1,306 @@
+/*
+ * IMAGEHLP library
+ *
+ * Copyright 1998 Patrik Stridvall
+ */
+
+#include "windows.h"
+#include "winbase.h"
+#include "winnt.h"
+#include "winerror.h"
+#include "wintypes.h"
+#include "heap.h"
+#include "debug.h"
+#include "imagehlp.h"
+
+/***********************************************************************
+ * Data
+ */
+
+static PLOADED_IMAGE32 IMAGEHLP_pFirstLoadedImage32=NULL;
+static PLOADED_IMAGE32 IMAGEHLP_pLastLoadedImage32=NULL;
+
+static LOADED_IMAGE32 IMAGEHLP_EmptyLoadedImage32 = {
+ NULL, /* ModuleName */
+ 0xffffffff, /* hFile */
+ NULL, /* MappedAddress */
+ NULL, /* FileHeader */
+ NULL, /* LastRvaSection */
+ 0, /* NumberOfSections */
+ NULL, /* Sections */
+ 1, /* Characteristics */
+ FALSE, /* fSystemImage */
+ FALSE, /* fDOSImage */
+ { &IMAGEHLP_EmptyLoadedImage32.Links, &IMAGEHLP_EmptyLoadedImage32.Links }, /* Links */
+ 148, /* SizeOfImage; */
+};
+
+/***********************************************************************
+ * EnumerateLoadedModules32 (IMAGEHLP.4)
+ */
+BOOL32 WINAPI EnumerateLoadedModules32(
+ HANDLE32 hProcess,
+ PENUMLOADED_MODULES_CALLBACK32 EnumLoadedModulesCallback,
+ PVOID UserContext)
+{
+ FIXME(imagehlp, "(0x%08x, %p, %p): stub\n",
+ hProcess, EnumLoadedModulesCallback, UserContext
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * GetTimestampForLoadedLibrary32 (IMAGEHLP.9)
+ */
+DWORD WINAPI GetTimestampForLoadedLibrary32(HMODULE32 Module)
+{
+ FIXME(imagehlp, "(0x%08x): stub\n", Module);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return 0;
+}
+
+/***********************************************************************
+ * GetImageConfigInformation32 (IMAGEHLP.7)
+ */
+BOOL32 WINAPI GetImageConfigInformation32(
+ PLOADED_IMAGE32 LoadedImage,
+ PIMAGE_LOAD_CONFIG_DIRECTORY32 ImageConfigInformation)
+{
+ FIXME(imagehlp, "(%p, %p): stub\n",
+ LoadedImage, ImageConfigInformation
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * GetImageUnusedHeaderBytes32 (IMAGEHLP.8)
+ */
+DWORD WINAPI GetImageUnusedHeaderBytes32(
+ PLOADED_IMAGE32 LoadedImage,
+ LPDWORD SizeUnusedHeaderBytes)
+{
+ FIXME(imagehlp, "(%p, %p): stub\n",
+ LoadedImage, SizeUnusedHeaderBytes
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return 0;
+}
+
+/***********************************************************************
+ * ImageDirectoryEntryToData32 (IMAGEHLP.11)
+ */
+PVOID WINAPI ImageDirectoryEntryToData32(
+ PVOID Base, BOOLEAN MappedAsImage, USHORT DirectoryEntry, PULONG Size)
+{
+ FIXME(imagehlp, "(%p, %d, %d, %p): stub\n",
+ Base, MappedAsImage, DirectoryEntry, Size
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return NULL;
+}
+
+/***********************************************************************
+ * ImageLoad32 (IMAGEHLP.16)
+ */
+PLOADED_IMAGE32 WINAPI ImageLoad32(LPSTR DllName, LPSTR DllPath)
+{
+ PLOADED_IMAGE32 pLoadedImage =
+ HeapAlloc(IMAGEHLP_hHeap32, 0, sizeof(LOADED_IMAGE32));
+ return pLoadedImage;
+}
+
+/***********************************************************************
+ * ImageNtHeader32 (IMAGEHLP.17)
+ */
+PIMAGE_NT_HEADERS32 WINAPI ImageNtHeader32(PVOID Base)
+{
+ return (PIMAGE_NT_HEADERS32)
+ ((LPBYTE) Base + ((PIMAGE_DOS_HEADER32) Base)->e_lfanew);
+}
+
+/***********************************************************************
+ * ImageRvaToSection32 (IMAGEHLP.19)
+ */
+PIMAGE_SECTION_HEADER32 WINAPI ImageRvaToSection32(
+ PIMAGE_NT_HEADERS32 NtHeaders, PVOID Base, ULONG Rva)
+{
+ FIXME(imagehlp, "(%p, %p, %ld): stub\n", NtHeaders, Base, Rva);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return NULL;
+}
+
+/***********************************************************************
+ * ImageRvaToVa32 (IMAGEHLP.20)
+ */
+PVOID WINAPI ImageRvaToVa32(
+ PIMAGE_NT_HEADERS32 NtHeaders, PVOID Base, ULONG Rva,
+ PIMAGE_SECTION_HEADER32 *LastRvaSection)
+{
+ FIXME(imagehlp, "(%p, %p, %ld, %p): stub\n",
+ NtHeaders, Base, Rva, LastRvaSection
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return NULL;
+}
+
+/***********************************************************************
+ * ImageUnload32 (IMAGEHLP.21)
+ */
+BOOL32 WINAPI ImageUnload32(PLOADED_IMAGE32 pLoadedImage)
+{
+ LIST_ENTRY32 *pCurrent, *pFind;
+ if(!IMAGEHLP_pFirstLoadedImage32 || !pLoadedImage)
+ {
+ /* No image loaded or null pointer */
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ pFind=&pLoadedImage->Links;
+ pCurrent=&IMAGEHLP_pFirstLoadedImage32->Links;
+ while((pCurrent != pFind) &&
+ (pCurrent != NULL))
+ pCurrent = pCurrent->Flink;
+ if(!pCurrent)
+ {
+ /* Not found */
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ if(pCurrent->Blink)
+ pCurrent->Blink->Flink = pCurrent->Flink;
+ else
+ IMAGEHLP_pFirstLoadedImage32 = pCurrent->Flink?CONTAINING_RECORD(
+ pCurrent->Flink, LOADED_IMAGE32, Links):NULL;
+
+ if(pCurrent->Flink)
+ pCurrent->Flink->Blink = pCurrent->Blink;
+ else
+ IMAGEHLP_pLastLoadedImage32 = pCurrent->Blink?CONTAINING_RECORD(
+ pCurrent->Blink, LOADED_IMAGE32, Links):NULL;
+
+ return FALSE;
+}
+
+/***********************************************************************
+ * MapAndLoad32 (IMAGEHLP.25)
+ */
+BOOL32 WINAPI MapAndLoad32(
+ LPSTR pszImageName, LPSTR pszDllPath, PLOADED_IMAGE32 pLoadedImage,
+ BOOL32 bDotDll, BOOL32 bReadOnly)
+{
+ CHAR szFileName[MAX_PATH];
+ HANDLE32 hFile = (HANDLE32) NULL;
+ HANDLE32 hFileMapping = (HANDLE32) NULL;
+ HMODULE32 hModule = (HMODULE32) NULL;
+ PIMAGE_NT_HEADERS32 pNtHeader = NULL;
+
+ /* PathCombine(&szFileName, pszDllPath, pszImageName); */
+ /* PathRenameExtension(&szFileName, bDotDll?:"dll":"exe"); */
+
+ /* FIXME: Check if the file already loaded (use IMAGEHLP_pFirstLoadedImage32) */
+ if(!(hFile = CreateFile32A(
+ szFileName, GENERIC_READ, 1, /* FIXME: FILE_SHARE_READ not defined */
+ NULL, OPEN_EXISTING, 0, (HANDLE32) NULL)))
+ {
+ SetLastError(ERROR_FILE_NOT_FOUND);
+ goto Error;
+ }
+
+ if(!(hFileMapping = CreateFileMapping32A(
+ hFile, NULL, PAGE_READONLY | SEC_COMMIT, 0, 0, NULL)))
+ {
+ DWORD dwLastError = GetLastError();
+ WARN(imagehlp, "CreateFileMapping: Error = %ld\n", dwLastError);
+ SetLastError(dwLastError);
+ goto Error;
+ }
+ CloseHandle(hFile);
+ hFile = (HANDLE32) NULL;
+
+ if(!(hModule = (HMODULE32) MapViewOfFile(
+ hFileMapping, FILE_MAP_READ, 0, 0, 0)))
+ {
+ DWORD dwLastError = GetLastError();
+ WARN(imagehlp, "MapViewOfFile: Error = %ld\n", dwLastError);
+ SetLastError(dwLastError);
+ goto Error;
+ }
+
+ CloseHandle(hFileMapping);
+ hFileMapping=(HANDLE32) NULL;
+
+ pLoadedImage = (PLOADED_IMAGE32) HeapAlloc(
+ IMAGEHLP_hHeap32, 0, sizeof(LOADED_IMAGE32)
+ );
+
+ pNtHeader = ImageNtHeader32((PVOID) hModule);
+
+ pLoadedImage->ModuleName =
+ HEAP_strdupA(IMAGEHLP_hHeap32, 0, pszDllPath); /* FIXME: Correct? */
+ pLoadedImage->hFile = hFile;
+ pLoadedImage->MappedAddress = (PUCHAR) hModule;
+ pLoadedImage->FileHeader = pNtHeader;
+ pLoadedImage->Sections = (PIMAGE_SECTION_HEADER32)
+ ((LPBYTE) &pNtHeader->OptionalHeader +
+ pNtHeader->FileHeader.SizeOfOptionalHeader);
+ pLoadedImage->NumberOfSections =
+ pNtHeader->FileHeader.NumberOfSections;
+ pLoadedImage->SizeOfImage =
+ pNtHeader->OptionalHeader.SizeOfImage;
+ pLoadedImage->Characteristics =
+ pNtHeader->FileHeader.Characteristics;
+ pLoadedImage->LastRvaSection = pLoadedImage->Sections;
+
+ pLoadedImage->fSystemImage = FALSE; /* FIXME */
+ pLoadedImage->fDOSImage = FALSE; /* FIXME */
+
+ /* FIXME: Make thread safe */
+ pLoadedImage->Links.Flink = NULL;
+ pLoadedImage->Links.Blink = &IMAGEHLP_pLastLoadedImage32->Links;
+ if(IMAGEHLP_pLastLoadedImage32)
+ IMAGEHLP_pLastLoadedImage32->Links.Flink = &pLoadedImage->Links;
+ IMAGEHLP_pLastLoadedImage32 = pLoadedImage;
+ if(!IMAGEHLP_pFirstLoadedImage32)
+ IMAGEHLP_pFirstLoadedImage32 = pLoadedImage;
+
+ return TRUE;
+
+Error:
+ if(hModule)
+ UnmapViewOfFile((PVOID) hModule);
+ if(hFileMapping)
+ CloseHandle(hFileMapping);
+ if(hFile)
+ CloseHandle(hFile);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SetImageConfigInformation32 (IMAGEHLP.34)
+ */
+BOOL32 WINAPI SetImageConfigInformation32(
+ PLOADED_IMAGE32 LoadedImage,
+ PIMAGE_LOAD_CONFIG_DIRECTORY32 ImageConfigInformation)
+{
+ FIXME(imagehlp, "(%p, %p): stub\n",
+ LoadedImage, ImageConfigInformation
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * UnMapAndLoad32 (IMAGEHLP.58)
+ */
+BOOL32 WINAPI UnMapAndLoad32(PLOADED_IMAGE32 LoadedImage)
+{
+ FIXME(imagehlp, "(%p): stub\n", LoadedImage);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+
diff --git a/dlls/imagehlp/debug.c b/dlls/imagehlp/debug.c
new file mode 100644
index 0000000..becf247
--- /dev/null
+++ b/dlls/imagehlp/debug.c
@@ -0,0 +1,101 @@
+/*
+ * IMAGEHLP library
+ *
+ * Copyright 1998 Patrik Stridvall
+ */
+
+#include "windows.h"
+#include "winerror.h"
+#include "wintypes.h"
+#include "debug.h"
+#include "imagehlp.h"
+
+/***********************************************************************
+ * FindDebugInfoFile32 (IMAGEHLP.5)
+ */
+HANDLE32 WINAPI FindDebugInfoFile32(
+ LPSTR FileName, LPSTR SymbolPath, LPSTR DebugFilePath)
+{
+ FIXME(imagehlp, "(%s, %s, %s): stub\n",
+ debugstr_a(FileName), debugstr_a(SymbolPath),
+ debugstr_a(DebugFilePath)
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return (HANDLE32) NULL;
+}
+
+/***********************************************************************
+ * FindExecutableImage32 (IMAGEHLP.6)
+ */
+HANDLE32 WINAPI FindExecutableImage32(
+ LPSTR FileName, LPSTR SymbolPath, LPSTR ImageFilePath)
+{
+ FIXME(imagehlp, "(%s, %s, %s): stub\n",
+ debugstr_a(FileName), debugstr_a(SymbolPath),
+ debugstr_a(ImageFilePath)
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return (HANDLE32) NULL;
+}
+
+/***********************************************************************
+ * MapDebugInformation32 (IMAGEHLP.26)
+ */
+PIMAGE_DEBUG_INFORMATION32 WINAPI MapDebugInformation32(
+ HANDLE32 FileHandle, LPSTR FileName,
+ LPSTR SymbolPath, DWORD ImageBase)
+{
+ FIXME(imagehlp, "(0x%08x, %s, %s, 0x%08lx): stub\n",
+ FileHandle, FileName, SymbolPath, ImageBase
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return NULL;
+}
+
+/***********************************************************************
+ * StackWalk32 (IMAGEHLP.36)
+ */
+BOOL32 WINAPI StackWalk32(
+ DWORD MachineType, HANDLE32 hProcess, HANDLE32 hThread,
+ PSTACKFRAME32 StackFrame, PVOID ContextRecord,
+ PREAD_PROCESS_MEMORY_ROUTINE32 ReadMemoryRoutine,
+ PFUNCTION_TABLE_ACCESS_ROUTINE32 FunctionTableAccessRoutine,
+ PGET_MODULE_BASE_ROUTINE32 GetModuleBaseRoutine,
+ PTRANSLATE_ADDRESS_ROUTINE32 TranslateAddress)
+{
+ FIXME(imagehlp,
+ "(%ld, 0x%08x, 0x%08x, %p, %p, %p, %p, %p, %p): stub\n",
+ MachineType, hProcess, hThread, StackFrame, ContextRecord,
+ ReadMemoryRoutine, FunctionTableAccessRoutine,
+ GetModuleBaseRoutine, TranslateAddress
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * UnDecorateSymbolName32 (IMAGEHLP.57)
+ */
+DWORD WINAPI UnDecorateSymbolName32(
+ LPCSTR DecoratedName, LPSTR UnDecoratedName,
+ DWORD UndecoratedLength, DWORD Flags)
+{
+ FIXME(imagehlp, "(%s, %s, %ld, 0x%08lx): stub\n",
+ debugstr_a(DecoratedName), debugstr_a(UnDecoratedName),
+ UndecoratedLength, Flags
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return 0;
+}
+
+/***********************************************************************
+ * UnmapDebugInformation32 (IMAGEHLP.59)
+ */
+
+BOOL32 WINAPI UnmapDebugInformation32(
+ PIMAGE_DEBUG_INFORMATION32 DebugInfo)
+{
+ FIXME(imagehlp, "(%p): stub\n", DebugInfo);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
diff --git a/dlls/imagehlp/imagehlp_main.c b/dlls/imagehlp/imagehlp_main.c
new file mode 100644
index 0000000..9e728ad
--- /dev/null
+++ b/dlls/imagehlp/imagehlp_main.c
@@ -0,0 +1,112 @@
+/*
+ * IMAGEHLP library
+ *
+ * Copyright 1998 Patrik Stridvall
+ */
+
+#include "windows.h"
+#include "winerror.h"
+#include "wintypes.h"
+#include "debug.h"
+#include "imagehlp.h"
+
+/**********************************************************************/
+
+HANDLE32 IMAGEHLP_hHeap32 = (HANDLE32) NULL;
+
+static API_VERSION32 IMAGEHLP_ApiVersion = { 4, 0, 0, 5 };
+
+/***********************************************************************
+ * IMAGEHLP_LibMain (IMAGEHLP.init)
+ */
+BOOL32 WINAPI IMAGEHLP_LibMain(
+ HINSTANCE32 hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
+{
+ switch(fdwReason)
+ {
+ case DLL_PROCESS_ATTACH:
+ IMAGEHLP_hHeap32 = HeapCreate(0, 0x10000, 0);
+ break;
+ case DLL_PROCESS_DETACH:
+ HeapDestroy(IMAGEHLP_hHeap32);
+ IMAGEHLP_hHeap32 = (HANDLE32) NULL;
+ break;
+ case DLL_THREAD_ATTACH:
+ break;
+ case DLL_THREAD_DETACH:
+ break;
+ default:
+ break;
+ }
+ return TRUE;
+}
+
+/***********************************************************************
+ * ImagehlpApiVersion32 (IMAGEHLP.22)
+ */
+PAPI_VERSION32 WINAPI ImagehlpApiVersion32()
+{
+ return &IMAGEHLP_ApiVersion;
+}
+
+/***********************************************************************
+ * ImagehlpApiVersionEx32 (IMAGEHLP.23)
+ */
+PAPI_VERSION32 WINAPI ImagehlpApiVersionEx32(PAPI_VERSION32 AppVersion)
+{
+ if(!AppVersion)
+ return NULL;
+
+ AppVersion->MajorVersion = IMAGEHLP_ApiVersion.MajorVersion;
+ AppVersion->MinorVersion = IMAGEHLP_ApiVersion.MinorVersion;
+ AppVersion->Revision = IMAGEHLP_ApiVersion.Revision;
+ AppVersion->Reserved = IMAGEHLP_ApiVersion.Reserved;
+
+ return AppVersion;
+}
+
+/***********************************************************************
+ * MakeSureDirectoryPathExists32 (IMAGEHLP.24)
+ */
+BOOL32 WINAPI MakeSureDirectoryPathExists32(LPCSTR DirPath)
+{
+ FIXME(imagehlp, "(%s): stub\n", debugstr_a(DirPath));
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * MarkImageAsRunFromSwap (IMAGEHLP.29)
+ * FIXME
+ * No documentation available.
+ */
+
+/***********************************************************************
+ * SearchTreeForFile32 (IMAGEHLP.33)
+ */
+BOOL32 WINAPI SearchTreeForFile32(
+ LPSTR RootPath, LPSTR InputPathName, LPSTR OutputPathBuffer)
+{
+ FIXME(imagehlp, "(%s, %s, %s): stub\n",
+ debugstr_a(RootPath), debugstr_a(InputPathName),
+ debugstr_a(OutputPathBuffer)
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * TouchFileTimes32 (IMAGEHLP.56)
+ */
+BOOL32 WINAPI TouchFileTimes32(
+ HANDLE32 FileHandle, LPSYSTEMTIME lpSystemTime)
+{
+ FIXME(imagehlp, "(0x%08x, %p): stub\n",
+ FileHandle, lpSystemTime
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+
+
diff --git a/dlls/imagehlp/integrity.c b/dlls/imagehlp/integrity.c
new file mode 100644
index 0000000..9614da5
--- /dev/null
+++ b/dlls/imagehlp/integrity.c
@@ -0,0 +1,91 @@
+/*
+ * IMAGEHLP library
+ *
+ * Copyright 1998 Patrik Stridvall
+ */
+
+#include "windows.h"
+#include "winerror.h"
+#include "wintypes.h"
+#include "debug.h"
+#include "imagehlp.h"
+
+/***********************************************************************
+ * ImageAddCertificate32 (IMAGEHLP.10)
+ */
+
+BOOL32 WINAPI ImageAddCertificate32(
+ HANDLE32 FileHandle, PWIN_CERTIFICATE32 Certificate, PDWORD Index)
+{
+ FIXME(imagehlp, "(0x%08x, %p, %p): stub\n",
+ FileHandle, Certificate, Index
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * ImageEnumerateCertificates32 (IMAGEHLP.12)
+ */
+BOOL32 WINAPI ImageEnumerateCertificates32(
+ HANDLE32 FileHandle, WORD TypeFilter, PDWORD CertificateCount,
+ PDWORD Indices, DWORD IndexCount)
+{
+ FIXME(imagehlp, "(0x%08x, %hd, %p, %p, %ld): stub\n",
+ FileHandle, TypeFilter, CertificateCount, Indices, IndexCount
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * ImageGetCertificateData32 (IMAGEHLP.13)
+ */
+BOOL32 WINAPI ImageGetCertificateData32(
+ HANDLE32 FileHandle, DWORD CertificateIndex,
+ PWIN_CERTIFICATE32 Certificate, PDWORD RequiredLength)
+{
+ FIXME(imagehlp, "(0x%08x, %ld, %p, %p): stub\n",
+ FileHandle, CertificateIndex, Certificate, RequiredLength
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * ImageGetCertificateHeader32 (IMAGEHLP.14)
+ */
+BOOL32 WINAPI ImageGetCertificateHeader32(
+ HANDLE32 FileHandle, DWORD CertificateIndex,
+ PWIN_CERTIFICATE32 Certificateheader)
+{
+ FIXME(imagehlp, "(0x%08x, %ld, %p): stub\n",
+ FileHandle, CertificateIndex, Certificateheader
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * ImageGetDigestStream32 (IMAGEHLP.15)
+ */
+BOOL32 WINAPI ImageGetDigestStream32(
+ HANDLE32 FileHandle, DWORD DigestLevel,
+ DIGEST_FUNCTION32 DigestFunction, DIGEST_HANDLE32 DigestHandle)
+{
+ FIXME(imagehlp, "(%0x08x, %ld, %p, %p): stub\n",
+ FileHandle, DigestLevel, DigestFunction, DigestHandle
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * ImageRemoveCertificate32 (IMAGEHLP.18)
+ */
+BOOL32 WINAPI ImageRemoveCertificate32(HANDLE32 FileHandle, DWORD Index)
+{
+ FIXME(imagehlp, "(0x%08x, %ld): stub\n", FileHandle, Index);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
diff --git a/dlls/imagehlp/internal.c b/dlls/imagehlp/internal.c
new file mode 100644
index 0000000..3d780b2
--- /dev/null
+++ b/dlls/imagehlp/internal.c
@@ -0,0 +1,113 @@
+/*
+ * IMAGEHLP library
+ *
+ * Copyright 1998 Patrik Stridvall
+ */
+
+#include "windows.h"
+#include "winerror.h"
+#include "wintypes.h"
+#include "debug.h"
+#include "imagehlp.h"
+
+/***********************************************************************
+ * InitializeListHead32
+ */
+VOID InitializeListHead32(PLIST_ENTRY32 pListHead)
+{
+ pListHead->Flink = pListHead;
+ pListHead->Blink = pListHead;
+}
+
+/***********************************************************************
+ * InsertHeadList32
+ */
+VOID InsertHeadList32(PLIST_ENTRY32 pListHead, PLIST_ENTRY32 pEntry)
+{
+ pEntry->Blink = pListHead;
+ pEntry->Flink = pListHead->Flink;
+ pListHead->Flink = pEntry;
+}
+
+/***********************************************************************
+ * InsertTailList32
+ */
+VOID InsertTailList32(PLIST_ENTRY32 pListHead, PLIST_ENTRY32 pEntry)
+{
+ pEntry->Flink = pListHead;
+ pEntry->Blink = pListHead->Blink;
+ pListHead->Blink = pEntry;
+}
+
+/***********************************************************************
+ * IsListEmpty32
+ */
+BOOLEAN IsListEmpty32(PLIST_ENTRY32 pListHead)
+{
+ return !pListHead;
+}
+
+/***********************************************************************
+ * PopEntryList32
+ */
+PSINGLE_LIST_ENTRY32 PopEntryList32(PSINGLE_LIST_ENTRY32 pListHead)
+{
+ pListHead->Next = NULL;
+ return pListHead;
+}
+
+/***********************************************************************
+ * PushEntryList32
+ */
+VOID PushEntryList32(
+ PSINGLE_LIST_ENTRY32 pListHead, PSINGLE_LIST_ENTRY32 pEntry)
+{
+ pEntry->Next=pListHead;
+}
+
+/***********************************************************************
+ * RemoveEntryList32
+ */
+VOID RemoveEntryList32(PLIST_ENTRY32 pEntry)
+{
+ pEntry->Flink->Blink = pEntry->Blink;
+ pEntry->Blink->Flink = pEntry->Flink;
+ pEntry->Flink = NULL;
+ pEntry->Blink = NULL;
+}
+
+/***********************************************************************
+ * RemoveHeadList32
+ */
+PLIST_ENTRY32 RemoveHeadList32(PLIST_ENTRY32 pListHead)
+{
+ PLIST_ENTRY32 p = pListHead->Flink;
+
+ if(p != pListHead)
+ {
+ RemoveEntryList32(pListHead);
+ return p;
+ }
+ else
+ {
+ pListHead->Flink = NULL;
+ pListHead->Blink = NULL;
+ return NULL;
+ }
+}
+
+/***********************************************************************
+ * RemoveTailList32
+ */
+PLIST_ENTRY32 RemoveTailList32(PLIST_ENTRY32 pListHead)
+{
+ RemoveHeadList32(pListHead->Blink);
+ if(pListHead != pListHead->Blink)
+ return pListHead;
+ else
+ return NULL;
+}
+
+
+
+
diff --git a/dlls/imagehlp/modify.c b/dlls/imagehlp/modify.c
new file mode 100644
index 0000000..de67bab
--- /dev/null
+++ b/dlls/imagehlp/modify.c
@@ -0,0 +1,163 @@
+/*
+ * IMAGEHLP library
+ *
+ * Copyright 1998 Patrik Stridvall
+ */
+
+#include "windows.h"
+#include "winerror.h"
+#include "wintypes.h"
+#include "debug.h"
+#include "imagehlp.h"
+
+/***********************************************************************
+ * BindImage32 (IMAGEHLP.1)
+ */
+BOOL32 WINAPI BindImage32(
+ LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath)
+{
+ return BindImageEx32(0, ImageName, DllPath, SymbolPath, NULL);
+}
+
+/***********************************************************************
+ * BindImageEx32 (IMAGEHLP.2)
+ */
+BOOL32 WINAPI BindImageEx32(
+ DWORD Flags, LPSTR ImageName, LPSTR DllPath, LPSTR SymbolPath,
+ PIMAGEHLP_STATUS_ROUTINE32 StatusRoutine)
+{
+ FIXME(imagehlp, "(%ld, %s, %s, %s, %p): stub\n",
+ Flags, debugstr_a(ImageName), debugstr_a(DllPath),
+ debugstr_a(SymbolPath), StatusRoutine
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * CheckSumMappedFile32 (IMAGEHLP.3)
+ */
+PIMAGE_NT_HEADERS32 WINAPI CheckSumMappedFile32(
+ LPVOID BaseAddress, DWORD FileLength,
+ LPDWORD HeaderSum, LPDWORD CheckSum)
+{
+ FIXME(imagehlp, "(%p, %ld, %p, %p): stub\n",
+ BaseAddress, FileLength, HeaderSum, CheckSum
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return NULL;
+}
+
+/***********************************************************************
+ * MapFileAndCheckSum32A (IMAGEHLP.27)
+ */
+DWORD WINAPI MapFileAndCheckSum32A(
+ LPSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum)
+{
+ FIXME(imagehlp, "(%s, %p, %p): stub\n",
+ debugstr_a(Filename), HeaderSum, CheckSum
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return CHECKSUM_OPEN_FAILURE;
+}
+
+/***********************************************************************
+ * MapFileAndCheckSum32W (IMAGEHLP.28)
+ */
+DWORD WINAPI MapFileAndCheckSum32W(
+ LPWSTR Filename, LPDWORD HeaderSum, LPDWORD CheckSum)
+{
+ FIXME(imagehlp, "(%s, %p, %p): stub\n",
+ debugstr_w(Filename), HeaderSum, CheckSum
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return CHECKSUM_OPEN_FAILURE;
+}
+
+/***********************************************************************
+ * ReBaseImage32 (IMAGEHLP.30)
+ */
+BOOL32 WINAPI ReBaseImage32(
+ LPSTR CurrentImageName, LPSTR SymbolPath, BOOL32 fReBase,
+ BOOL32 fRebaseSysfileOk, BOOL32 fGoingDown, ULONG CheckImageSize,
+ ULONG *OldImageSize, ULONG *OldImageBase, ULONG *NewImageSize,
+ ULONG *NewImageBase, ULONG TimeStamp)
+{
+ FIXME(imagehlp,
+ "(%s, %s, %d, %d, %d, %ld, %p, %p, %p, %p, %ld): stub\n",
+ debugstr_a(CurrentImageName),debugstr_a(SymbolPath), fReBase,
+ fRebaseSysfileOk, fGoingDown, CheckImageSize, OldImageSize,
+ OldImageBase, NewImageSize, NewImageBase, TimeStamp
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * RemovePrivateCvSymbolic32 (IMAGEHLP.31)
+ */
+BOOL32 WINAPI RemovePrivateCvSymbolic32(
+ PCHAR DebugData, PCHAR *NewDebugData, ULONG *NewDebugSize)
+{
+ FIXME(imagehlp, "(%p, %p, %p): stub\n",
+ DebugData, NewDebugData, NewDebugSize
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * RemoveRelocations32 (IMAGEHLP.32)
+ */
+VOID WINAPI RemoveRelocations32(PCHAR ImageName)
+{
+ FIXME(imagehlp, "(%p): stub\n", ImageName);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+}
+
+/***********************************************************************
+ * SplitSymbols32 (IMAGEHLP.35)
+ */
+BOOL32 WINAPI SplitSymbols32(
+ LPSTR ImageName, LPSTR SymbolsPath,
+ LPSTR SymbolFilePath, DWORD Flags)
+{
+ FIXME(imagehlp, "(%s, %s, %s, %ld): stub\n",
+ debugstr_a(ImageName), debugstr_a(SymbolsPath),
+ debugstr_a(SymbolFilePath), Flags
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * UpdateDebugInfoFile32 (IMAGEHLP.60)
+ */
+BOOL32 WINAPI UpdateDebugInfoFile32(
+ LPSTR ImageFileName, LPSTR SymbolPath,
+ LPSTR DebugFilePath, PIMAGE_NT_HEADERS32 NtHeaders)
+{
+ FIXME(imagehlp, "(%s, %s, %s, %p): stub\n",
+ debugstr_a(ImageFileName), debugstr_a(SymbolPath),
+ debugstr_a(DebugFilePath), NtHeaders
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * UpdateDebugInfoFileEx32 (IMAGEHLP.?)
+ * FIXME
+ * Function has no ordinal.
+ */
+BOOL32 WINAPI UpdateDebugInfoFileEx32(
+ LPSTR ImageFileName, LPSTR SymbolPath, LPSTR DebugFilePath,
+ PIMAGE_NT_HEADERS32 NtHeaders, DWORD OldChecksum)
+{
+ FIXME(imagehlp, "(%s, %s, %s, %p, %ld): stub\n",
+ debugstr_a(ImageFileName), debugstr_a(SymbolPath),
+ debugstr_a(DebugFilePath), NtHeaders, OldChecksum
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
diff --git a/dlls/imagehlp/symbol.c b/dlls/imagehlp/symbol.c
new file mode 100644
index 0000000..4ff3512
--- /dev/null
+++ b/dlls/imagehlp/symbol.c
@@ -0,0 +1,244 @@
+/*
+ * IMAGEHLP library
+ *
+ * Copyright 1998 Patrik Stridvall
+ */
+
+#include "windows.h"
+#include "winerror.h"
+#include "wintypes.h"
+#include "debug.h"
+#include "imagehlp.h"
+
+/***********************************************************************
+ * SymCleanup32 (IMAGEHLP.37)
+ */
+BOOL32 WINAPI SymCleanup32(HANDLE32 hProcess)
+{
+ FIXME(imagehlp, "(0x%08x): stub\n", hProcess);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymEnumerateModules32 (IMAGEHLP.38)
+ */
+
+BOOL32 WINAPI SymEnumerateModules32(
+ HANDLE32 hProcess, PSYM_ENUMMODULES_CALLBACK32 EnumModulesCallback,
+ PVOID UserContext)
+{
+ FIXME(imagehlp, "(0x%08x, %p, %p): stub\n",
+ hProcess, EnumModulesCallback, UserContext
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymEnumerateSymbols32 (IMAGEHLP.39)
+ */
+BOOL32 WINAPI SymEnumerateSymbols32(
+ HANDLE32 hProcess, DWORD BaseOfDll,
+ PSYM_ENUMSYMBOLS_CALLBACK32 EnumSymbolsCallback, PVOID UserContext)
+{
+ FIXME(imagehlp, "(0x%08x, %p, %p): stub\n",
+ hProcess, EnumSymbolsCallback, UserContext
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymFunctionTableAccess32 (IMAGEHLP.40)
+ */
+PVOID WINAPI SymFunctionTableAccess32(HANDLE32 hProcess, DWORD AddrBase)
+{
+ FIXME(imagehlp, "(0x%08x, 0x%08lx): stub\n", hProcess, AddrBase);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymGetModuleBase32 (IMAGEHLP.41)
+ */
+DWORD WINAPI SymGetModuleBase32(HANDLE32 hProcess, DWORD dwAddr)
+{
+ FIXME(imagehlp, "(0x%08x, 0x%08lx): stub\n", hProcess, dwAddr);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return 0;
+}
+
+/***********************************************************************
+ * SymGetModuleInfo32 (IMAGEHLP.42)
+ */
+BOOL32 WINAPI SymGetModuleInfo32(
+ HANDLE32 hProcess, DWORD dwAddr,
+ PIMAGEHLP_MODULE32 ModuleInfo)
+{
+ FIXME(imagehlp, "(0x%08x, 0x%08lx, %p): stub\n",
+ hProcess, dwAddr, ModuleInfo
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymGetOptions32 (IMAGEHLP.43)
+ */
+DWORD WINAPI SymGetOptions32()
+{
+ FIXME(imagehlp, "(): stub\n");
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return 0;
+}
+
+/***********************************************************************
+ * SymGetSearchPath32 (IMAGEHLP.44)
+ */
+BOOL32 WINAPI SymGetSearchPath32(
+ HANDLE32 hProcess, LPSTR szSearchPath, DWORD SearchPathLength)
+{
+ FIXME(imagehlp, "(0x%08x, %s, %ld): stub\n",
+ hProcess, debugstr_an(szSearchPath,SearchPathLength), SearchPathLength
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymGetSymFromAddr32 (IMAGEHLP.45)
+ */
+BOOL32 WINAPI SymGetSymFromAddr32(
+ HANDLE32 hProcess, DWORD dwAddr,
+ PDWORD pdwDisplacement, PIMAGEHLP_SYMBOL32 Symbol)
+{
+ FIXME(imagehlp, "(0x%08x, 0x%08lx, %p, %p): stub\n",
+ hProcess, dwAddr, pdwDisplacement, Symbol
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymGetSymFromName32 (IMAGEHLP.46)
+ */
+BOOL32 WINAPI SymGetSymFromName32(
+ HANDLE32 hProcess, LPSTR Name, PIMAGEHLP_SYMBOL32 Symbol)
+{
+ FIXME(imagehlp, "(0x%08x, %s, %p): stub\n", hProcess, Name, Symbol);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymGetSymNext32 (IMAGEHLP.47)
+ */
+BOOL32 WINAPI SymGetSymNext32(
+ HANDLE32 hProcess, PIMAGEHLP_SYMBOL32 Symbol)
+{
+ FIXME(imagehlp, "(0x%08x, %p): stub\n", hProcess, Symbol);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymGetSymPrev32 (IMAGEHLP.48)
+ */
+
+BOOL32 WINAPI SymGetSymPrev32(
+ HANDLE32 hProcess, PIMAGEHLP_SYMBOL32 Symbol)
+{
+ FIXME(imagehlp, "(0x%08x, %p): stub\n", hProcess, Symbol);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymInitialize32 (IMAGEHLP.49)
+ */
+BOOL32 WINAPI SymInitialize32(
+ HANDLE32 hProcess, LPSTR UserSearchPath, BOOL32 fInvadeProcess)
+{
+ FIXME(imagehlp, "(0x%08x, %s, %d): stub\n",
+ hProcess, debugstr_a(UserSearchPath), fInvadeProcess
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymLoadModule32 (IMAGEHLP.50)
+ */
+
+BOOL32 WINAPI SymLoadModule32(
+ HANDLE32 hProcess, HANDLE32 hFile, LPSTR ImageName, LPSTR ModuleName,
+ DWORD BaseOfDll, DWORD SizeOfDll)
+{
+ FIXME(imagehlp, "(0x%08x, 0x%08x, %s, %s, %ld, %ld): stub\n",
+ hProcess, hFile, debugstr_a(ImageName), debugstr_a(ModuleName),
+ BaseOfDll, SizeOfDll
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymRegisterCallback32 (IMAGEHLP.51)
+ */
+BOOL32 WINAPI SymRegisterCallback32(
+ HANDLE32 hProcess, PSYMBOL_REGISTERED_CALLBACK32 CallbackFunction,
+ PVOID UserContext)
+{
+ FIXME(imagehlp, "(0x%08x, %p, %p): stub\n",
+ hProcess, CallbackFunction, UserContext
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymSetOptions32 (IMAGEHLP.52)
+ */
+DWORD WINAPI SymSetOptions32(DWORD SymOptions)
+{
+ FIXME(imagehlp, "(%lx): stub\n", SymOptions);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return 0;
+}
+
+/***********************************************************************
+ * SymSetSearchPath32 (IMAGEHLP.53)
+ */
+BOOL32 WINAPI SymSetSearchPath32(HANDLE32 hProcess, LPSTR szSearchPath)
+{
+ FIXME(imagehlp, "(0x%08x, %s): stub\n",
+ hProcess, debugstr_a(szSearchPath)
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymUnDName32 (IMAGEHLP.54)
+ */
+BOOL32 WINAPI SymUnDName32(
+ PIMAGEHLP_SYMBOL32 sym, LPSTR UnDecName, DWORD UnDecNameLength)
+{
+ FIXME(imagehlp, "(%p, %s, %ld): stub\n",
+ sym, UnDecName, UnDecNameLength
+ );
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+/***********************************************************************
+ * SymUnloadModule32 (IMAGEHLP.55)
+ */
+BOOL32 WINAPI SymUnloadModule32(
+ HANDLE32 hProcess, DWORD BaseOfDll)
+{
+ FIXME(imagehlp, "(0x%08x, 0x%08lx): stub\n", hProcess, BaseOfDll);
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}