mirror of
https://github.com/reactos/reactos.git
synced 2025-04-27 09:00:27 +00:00
[IMAGEHLP] Sync with Wine Staging 4.18. CORE-16441
This commit is contained in:
parent
c3cabdbf31
commit
bee818a28a
4 changed files with 32 additions and 103 deletions
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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.@)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue