[IMAGEHLP] Sync with Wine Staging 4.18. CORE-16441

This commit is contained in:
Amine Khaldi 2019-11-02 18:33:24 +01:00
parent c3cabdbf31
commit bee818a28a
4 changed files with 32 additions and 103 deletions

View file

@ -33,9 +33,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(imagehlp);
/*********************************************************************** /***********************************************************************
* Data * Data
*/ */
LIST_ENTRY image_list = { &image_list, &image_list }; static LIST_ENTRY image_list = { &image_list, &image_list };
DECLSPEC_HIDDEN extern HANDLE IMAGEHLP_hHeap;
/*********************************************************************** /***********************************************************************
* GetImageConfigInformation (IMAGEHLP.@) * GetImageConfigInformation (IMAGEHLP.@)
@ -74,12 +73,12 @@ PLOADED_IMAGE WINAPI ImageLoad(PCSTR dll_name, PCSTR dll_path)
TRACE("(%s, %s)\n", dll_name, dll_path); TRACE("(%s, %s)\n", dll_name, dll_path);
image = HeapAlloc(IMAGEHLP_hHeap, 0, sizeof(*image)); image = HeapAlloc(GetProcessHeap(), 0, sizeof(*image));
if (!image) return NULL; if (!image) return NULL;
if (!MapAndLoad(dll_name, dll_path, image, TRUE, TRUE)) if (!MapAndLoad(dll_name, dll_path, image, TRUE, TRUE))
{ {
HeapFree(IMAGEHLP_hHeap, 0, image); HeapFree(GetProcessHeap(), 0, image);
return NULL; return NULL;
} }
@ -99,14 +98,7 @@ BOOL WINAPI ImageUnload(PLOADED_IMAGE loaded_image)
LIST_ENTRY *entry, *mark; LIST_ENTRY *entry, *mark;
PLOADED_IMAGE image; PLOADED_IMAGE image;
FIXME("(%p)\n", loaded_image); TRACE("(%p)\n", loaded_image);
if (!loaded_image)
{
/* No image loaded or null pointer */
SetLastError(ERROR_INVALID_PARAMETER);
return FALSE;
}
/* FIXME: do we really need to check this? */ /* FIXME: do we really need to check this? */
mark = &image_list; mark = &image_list;
@ -128,7 +120,7 @@ BOOL WINAPI ImageUnload(PLOADED_IMAGE loaded_image)
entry->Flink->Blink = entry->Blink; entry->Flink->Blink = entry->Blink;
UnMapAndLoad(loaded_image); UnMapAndLoad(loaded_image);
HeapFree(IMAGEHLP_hHeap, 0, loaded_image); HeapFree(GetProcessHeap(), 0, loaded_image);
return TRUE; return TRUE;
} }

View file

@ -25,27 +25,6 @@
#include "imagehlp.h" #include "imagehlp.h"
#include "wine/debug.h" #include "wine/debug.h"
/**********************************************************************/
DECLSPEC_HIDDEN HANDLE IMAGEHLP_hHeap = NULL;
/***********************************************************************
* DllMain (IMAGEHLP.init)
*/
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch(fdwReason)
{
case DLL_PROCESS_ATTACH:
DisableThreadLibraryCalls(hinstDLL);
IMAGEHLP_hHeap = HeapCreate(0, 0x10000, 0);
break;
case DLL_PROCESS_DETACH:
if (lpvReserved) break;
HeapDestroy(IMAGEHLP_hHeap);
break;
}
return TRUE;
}
/*********************************************************************** /***********************************************************************
* MarkImageAsRunFromSwap (IMAGEHLP.@) * MarkImageAsRunFromSwap (IMAGEHLP.@)

View file

@ -25,7 +25,6 @@
#include "winternl.h" #include "winternl.h"
#include "winerror.h" #include "winerror.h"
#include "wine/debug.h" #include "wine/debug.h"
#include "wine/exception.h"
#include "imagehlp.h" #include "imagehlp.h"
WINE_DEFAULT_DEBUG_CHANNEL(imagehlp); WINE_DEFAULT_DEBUG_CHANNEL(imagehlp);
@ -159,24 +158,25 @@ BOOL WINAPI BindImageEx(
/*********************************************************************** /***********************************************************************
* CheckSum (internal) * CheckSum (internal)
*/ */
static WORD CalcCheckSum(DWORD StartValue, LPVOID BaseAddress, DWORD ByteCount) static WORD CalcCheckSum(
DWORD StartValue, LPVOID BaseAddress, DWORD WordCount)
{ {
LPWORD Ptr; LPWORD Ptr;
DWORD Sum, i; DWORD Sum;
DWORD i;
Sum = StartValue; Sum = StartValue;
Ptr = (LPWORD)BaseAddress; Ptr = (LPWORD)BaseAddress;
for (i = ByteCount; i > 1; i -= 2) for (i = 0; i < WordCount; i++)
{ {
Sum += *Ptr; Sum += *Ptr;
if (HIWORD(Sum) != 0) if (HIWORD(Sum) != 0)
{
Sum = LOWORD(Sum) + HIWORD(Sum); Sum = LOWORD(Sum) + HIWORD(Sum);
}
Ptr++; Ptr++;
} }
if (i == 1)
Sum += *(BYTE *)Ptr;
return (WORD)(LOWORD(Sum) + HIWORD(Sum)); return (WORD)(LOWORD(Sum) + HIWORD(Sum));
} }
@ -188,60 +188,19 @@ PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
LPVOID BaseAddress, DWORD FileLength, LPVOID BaseAddress, DWORD FileLength,
LPDWORD HeaderSum, LPDWORD CheckSum) LPDWORD HeaderSum, LPDWORD CheckSum)
{ {
IMAGE_DOS_HEADER *dos = (IMAGE_DOS_HEADER *) BaseAddress; PIMAGE_NT_HEADERS header;
PIMAGE_NT_HEADERS32 Header32;
PIMAGE_NT_HEADERS64 Header64;
PIMAGE_NT_HEADERS ret = NULL;
DWORD *ChecksumFile;
DWORD CalcSum; DWORD CalcSum;
DWORD HdrSum = 0; DWORD HdrSum;
TRACE("(%p, %d, %p, %p)\n", TRACE("(%p, %d, %p, %p)\n", BaseAddress, FileLength, HeaderSum, CheckSum);
BaseAddress, FileLength, HeaderSum, CheckSum
);
CalcSum = (DWORD)CalcCheckSum(0, BaseAddress, FileLength); CalcSum = CalcCheckSum(0, BaseAddress, (FileLength + 1) / sizeof(WORD));
header = RtlImageNtHeader(BaseAddress);
__TRY if (!header)
{ return NULL;
if (dos->e_magic != IMAGE_DOS_SIGNATURE)
#ifdef __REACTOS__
_SEH2_LEAVE;
#else
break;
#endif
Header32 = (IMAGE_NT_HEADERS32 *)((char *)dos + dos->e_lfanew); *HeaderSum = HdrSum = header->OptionalHeader.CheckSum;
if (Header32->Signature != IMAGE_NT_SIGNATURE)
#ifdef __REACTOS__
_SEH2_LEAVE;
#else
break;
#endif
ret = (PIMAGE_NT_HEADERS)Header32;
if (Header32->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR32_MAGIC)
ChecksumFile = &Header32->OptionalHeader.CheckSum;
else if (Header32->OptionalHeader.Magic == IMAGE_NT_OPTIONAL_HDR64_MAGIC)
{
Header64 = (IMAGE_NT_HEADERS64 *)Header32;
ChecksumFile = &Header64->OptionalHeader.CheckSum;
}
else
#ifdef __REACTOS__
_SEH2_LEAVE;
#else
break;
#endif
HdrSum = *ChecksumFile;
}
__EXCEPT_PAGE_FAULT
{
/* nothing */
}
__ENDTRY
/* Subtract image checksum from calculated checksum. */ /* Subtract image checksum from calculated checksum. */
/* fix low word of checksum */ /* fix low word of checksum */
@ -268,9 +227,8 @@ PIMAGE_NT_HEADERS WINAPI CheckSumMappedFile(
CalcSum += FileLength; CalcSum += FileLength;
*CheckSum = CalcSum; *CheckSum = CalcSum;
*HeaderSum = HdrSum;
return ret; return header;
} }
/*********************************************************************** /***********************************************************************

View file

@ -77,7 +77,7 @@ dll/win32/httpapi # Synced to WineStaging-4.18
dll/win32/iccvid # Synced to WineStaging-4.0 dll/win32/iccvid # Synced to WineStaging-4.0
dll/win32/ieframe # Synced to WineStaging-4.18 dll/win32/ieframe # Synced to WineStaging-4.18
dll/win32/imaadp32.acm # Synced to WineStaging-4.0 dll/win32/imaadp32.acm # Synced to WineStaging-4.0
dll/win32/imagehlp # Synced to WineStaging-3.3 dll/win32/imagehlp # Synced to WineStaging-4.18
dll/win32/imm32 # Synced to WineStaging-4.0 dll/win32/imm32 # Synced to WineStaging-4.0
dll/win32/inetcomm # Synced to WineStaging-4.0 dll/win32/inetcomm # Synced to WineStaging-4.0
dll/win32/inetmib1 # Synced to WineStaging-3.17 dll/win32/inetmib1 # Synced to WineStaging-3.17