From 613ead7f0fae629b1e1c33c6e5cf2f2984295387 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Fri, 4 Oct 2002 00:27:10 +0000 Subject: [PATCH] Fixed some handle conversions in prevision of void* handles. --- dlls/imagehlp/access.c | 4 +- dlls/msvcrt/process.c | 4 +- dlls/user/user16.c | 7 ++- dlls/winspool/info.c | 4 +- include/tlhelp32.h | 4 +- loader/pe_image.c | 97 +++++++++++++++++++++--------------------- objects/font.c | 2 +- objects/gdiobj.c | 10 ++--- 8 files changed, 64 insertions(+), 68 deletions(-) diff --git a/dlls/imagehlp/access.c b/dlls/imagehlp/access.c index bdd60b4c04f..669677e02b0 100644 --- a/dlls/imagehlp/access.c +++ b/dlls/imagehlp/access.c @@ -37,7 +37,7 @@ static PLOADED_IMAGE IMAGEHLP_pLastLoadedImage=NULL; static LOADED_IMAGE IMAGEHLP_EmptyLoadedImage = { NULL, /* ModuleName */ - 0xffffffff, /* hFile */ + 0, /* hFile */ NULL, /* MappedAddress */ NULL, /* FileHeader */ NULL, /* LastRvaSection */ @@ -317,5 +317,3 @@ BOOL WINAPI UnMapAndLoad(PLOADED_IMAGE LoadedImage) SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return FALSE; } - - diff --git a/dlls/msvcrt/process.c b/dlls/msvcrt/process.c index f8abd6cce2d..1e3ece90456 100644 --- a/dlls/msvcrt/process.c +++ b/dlls/msvcrt/process.c @@ -453,7 +453,7 @@ int MSVCRT_system(const char* cmd) */ int _loaddll(const char* dllname) { - return LoadLibraryA(dllname); + return (int)LoadLibraryA(dllname); } /********************************************************************* @@ -461,7 +461,7 @@ int _loaddll(const char* dllname) */ int _unloaddll(int dll) { - if (FreeLibrary((HANDLE)dll)) + if (FreeLibrary((HMODULE)dll)) return 0; else { diff --git a/dlls/user/user16.c b/dlls/user/user16.c index 04b62bc41e6..8d164c7f7cd 100644 --- a/dlls/user/user16.c +++ b/dlls/user/user16.c @@ -181,8 +181,8 @@ BOOL16 WINAPI GetIconInfo16(HICON16 hIcon, LPICONINFO16 iconinfo) iconinfo->fIcon = ii32.fIcon; iconinfo->xHotspot = ii32.xHotspot; iconinfo->yHotspot = ii32.yHotspot; - iconinfo->hbmMask = ii32.hbmMask; - iconinfo->hbmColor = ii32.hbmColor; + iconinfo->hbmMask = HBITMAP_16(ii32.hbmMask); + iconinfo->hbmColor = HBITMAP_16(ii32.hbmColor); return ret; } @@ -204,8 +204,7 @@ HCURSOR16 WINAPI CreateCursor16(HINSTANCE16 hInstance, info.bPlanes = 1; info.bBitsPerPixel = 1; - return CreateCursorIconIndirect16(HINSTANCE_32(hInstance), &info, lpANDbits, - lpXORbits); + return CreateCursorIconIndirect16(hInstance, &info, lpANDbits, lpXORbits); } /********************************************************************** diff --git a/dlls/winspool/info.c b/dlls/winspool/info.c index 96500ff87a0..9a93fbf458d 100644 --- a/dlls/winspool/info.c +++ b/dlls/winspool/info.c @@ -1074,7 +1074,7 @@ HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter) * just create to find a DEVMODEA struct (it will use the WINEPS default * one in case it is not there, so we are ok). */ - size = DocumentPropertiesW(0, -1, pi->pPrinterName, NULL, NULL, 0); + size = DocumentPropertiesW(0, 0, pi->pPrinterName, NULL, NULL, 0); if(size < 0) { FIXME("DocumentPropertiesW on printer '%s' fails\n", debugstr_w(pi->pPrinterName)); size = sizeof(DEVMODEW); @@ -1084,7 +1084,7 @@ HANDLE WINAPI AddPrinterW(LPWSTR pName, DWORD Level, LPBYTE pPrinter) else { dmW = HeapAlloc(GetProcessHeap(), 0, size); dmW->dmSize = size; - if (0>DocumentPropertiesW(0,-1,pi->pPrinterName,dmW,NULL,DM_OUT_BUFFER)) { + if (0>DocumentPropertiesW(0,0,pi->pPrinterName,dmW,NULL,DM_OUT_BUFFER)) { ERR("DocumentPropertiesW on printer '%s' failed!\n", debugstr_w(pi->pPrinterName)); SetLastError(ERROR_UNKNOWN_PRINTER_DRIVER); return 0; diff --git a/include/tlhelp32.h b/include/tlhelp32.h index e0fa17615e1..aceb6dc380d 100644 --- a/include/tlhelp32.h +++ b/include/tlhelp32.h @@ -114,7 +114,7 @@ typedef struct tagMODULEENTRY32 DWORD ProccntUsage; BYTE *modBaseAddr; DWORD modBaseSize; - DWORD hModule; + HMODULE hModule; char szModule[MAX_MODULE_NAME32 + 1]; char szExePath[MAX_PATH]; } MODULEENTRY32, *PMODULEENTRY32, *LPMODULEENTRY32; @@ -128,7 +128,7 @@ typedef struct tagMODULEENTRY32W DWORD ProccntUsage; BYTE *modBaseAddr; DWORD modBaseSize; - DWORD hModule; + HMODULE hModule; WCHAR szModule[MAX_MODULE_NAME32 + 1]; WCHAR szExePath[MAX_PATH]; } MODULEENTRY32W, *PMODULEENTRY32W, *LPMODULEENTRY32W; diff --git a/loader/pe_image.c b/loader/pe_image.c index 029665c512f..941369a692d 100644 --- a/loader/pe_image.c +++ b/loader/pe_image.c @@ -56,7 +56,10 @@ WINE_DECLARE_DEBUG_CHANNEL(segment); /* convert PE image VirtualAddress to Real Address */ -#define RVA(x) ((void *)((char *)load_addr+(unsigned int)(x))) +inline static void *get_rva( HMODULE module, DWORD va ) +{ + return (void *)((char *)module + va); +} #define AdjustPtr(ptr,delta) ((char *)(ptr) + (delta)) @@ -66,37 +69,36 @@ void dump_exports( HMODULE hModule ) int i, j; WORD *ordinal; DWORD *function,*functions; - BYTE **name; - unsigned int load_addr = hModule; + DWORD *name; IMAGE_EXPORT_DIRECTORY *pe_exports; DWORD rva_start, size; pe_exports = RtlImageDirectoryEntryToData( hModule, TRUE, IMAGE_DIRECTORY_ENTRY_EXPORT, &size ); rva_start = (char *)pe_exports - (char *)hModule; - Module = (char*)RVA(pe_exports->Name); + Module = get_rva(hModule, pe_exports->Name); DPRINTF("*******EXPORT DATA*******\n"); DPRINTF("Module name is %s, %ld functions, %ld names\n", Module, pe_exports->NumberOfFunctions, pe_exports->NumberOfNames); - ordinal = RVA(pe_exports->AddressOfNameOrdinals); - functions = function = RVA(pe_exports->AddressOfFunctions); - name = RVA(pe_exports->AddressOfNames); + ordinal = get_rva(hModule, pe_exports->AddressOfNameOrdinals); + functions = function = get_rva(hModule, pe_exports->AddressOfFunctions); + name = get_rva(hModule, pe_exports->AddressOfNames); DPRINTF(" Ord RVA Addr Name\n" ); for (i=0;iNumberOfFunctions;i++, function++) { if (!*function) continue; /* No such function */ - DPRINTF( "%4ld %08lx %p", i + pe_exports->Base, *function, RVA(*function) ); + DPRINTF( "%4ld %08lx %p", i + pe_exports->Base, *function, get_rva(hModule, *function) ); /* Check if we have a name for it */ for (j = 0; j < pe_exports->NumberOfNames; j++) if (ordinal[j] == i) { - DPRINTF( " %s", (char*)RVA(name[j]) ); + DPRINTF( " %s", (char*)get_rva(hModule, name[j]) ); break; } if ((*function >= rva_start) && (*function <= rva_start + size)) - DPRINTF(" (forwarded -> %s)", (char *)RVA(*function)); + DPRINTF(" (forwarded -> %s)", (char *)get_rva(hModule, *function)); DPRINTF("\n"); } } @@ -117,11 +119,11 @@ static FARPROC PE_FindExportedFunction( { WORD * ordinals; DWORD * function; - BYTE ** name, *ename = NULL; int i, ordinal; - unsigned int load_addr = wm->module; DWORD rva_start, addr; char * forward; + DWORD *name; + char *ename = NULL; FARPROC proc; IMAGE_EXPORT_DIRECTORY *exports; DWORD exp_size; @@ -133,9 +135,9 @@ static FARPROC PE_FindExportedFunction( if (HIWORD(funcName)) TRACE("(%s)\n",funcName); else TRACE("(%d)\n",LOWORD(funcName)); - ordinals= RVA(exports->AddressOfNameOrdinals); - function= RVA(exports->AddressOfFunctions); - name = RVA(exports->AddressOfNames); + ordinals= get_rva(wm->module, exports->AddressOfNameOrdinals); + function= get_rva(wm->module, exports->AddressOfFunctions); + name = get_rva(wm->module, exports->AddressOfNames); forward = NULL; rva_start = (char *)exports - (char *)wm->module; @@ -146,7 +148,7 @@ static FARPROC PE_FindExportedFunction( /* first check the hint */ if (hint >= 0 && hint <= max) { - ename = RVA(name[hint]); + ename = get_rva(wm->module, name[hint]); if (!strcmp( ename, funcName )) { ordinal = ordinals[hint]; @@ -158,7 +160,7 @@ static FARPROC PE_FindExportedFunction( while (min <= max) { int res, pos = (min + max) / 2; - ename = RVA(name[pos]); + ename = get_rva(wm->module, name[pos]); if (!(res = strcmp( ename, funcName ))) { ordinal = ordinals[pos]; @@ -177,7 +179,7 @@ static FARPROC PE_FindExportedFunction( for (i = 0; i < exports->NumberOfNames; i++) if (ordinals[i] == ordinal) { - ename = RVA(name[i]); + ename = get_rva(wm->module, name[i]); break; } } @@ -192,7 +194,7 @@ static FARPROC PE_FindExportedFunction( addr = function[ordinal]; if (!addr) return NULL; - proc = RVA(addr); + proc = get_rva(wm->module, addr); if (((char *)proc < (char *)exports) || ((char *)proc >= (char *)exports + exp_size)) { if (snoop) @@ -229,8 +231,7 @@ static FARPROC PE_FindExportedFunction( */ DWORD PE_fixup_imports( WINE_MODREF *wm ) { - unsigned int load_addr = wm->module; - int i,characteristics_detection=1; + int i,characteristics_detection=1; IMAGE_IMPORT_DESCRIPTOR *imports, *pe_imp; DWORD size; @@ -268,7 +269,7 @@ DWORD PE_fixup_imports( WINE_MODREF *wm ) WINE_MODREF *wmImp; IMAGE_IMPORT_BY_NAME *pe_name; PIMAGE_THUNK_DATA import_list,thunk_list; - char *name = (char *) RVA(pe_imp->Name); + char *name = get_rva(wm->module, pe_imp->Name); if (characteristics_detection && !pe_imp->u.Characteristics) break; @@ -284,8 +285,8 @@ DWORD PE_fixup_imports( WINE_MODREF *wm ) if (pe_imp->u.OriginalFirstThunk != 0) { /* original MS style */ TRACE("Microsoft style imports used\n"); - import_list =(PIMAGE_THUNK_DATA) RVA(pe_imp->u.OriginalFirstThunk); - thunk_list = (PIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk); + import_list = get_rva(wm->module, (DWORD)pe_imp->u.OriginalFirstThunk); + thunk_list = get_rva(wm->module, (DWORD)pe_imp->FirstThunk); while (import_list->u1.Ordinal) { if (IMAGE_SNAP_BY_ORDINAL(import_list->u1.Ordinal)) { @@ -301,7 +302,7 @@ DWORD PE_fixup_imports( WINE_MODREF *wm ) thunk_list->u1.Function = (PDWORD)0xdeadbeef; } } else { /* import by name */ - pe_name = (PIMAGE_IMPORT_BY_NAME)RVA(import_list->u1.AddressOfData); + pe_name = get_rva(wm->module, (DWORD)import_list->u1.AddressOfData); TRACE("--- %s %s.%d\n", pe_name->Name, name, pe_name->Hint); thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress( wmImp->module, pe_name->Name, pe_name->Hint, TRUE @@ -317,7 +318,7 @@ DWORD PE_fixup_imports( WINE_MODREF *wm ) } } else { /* Borland style */ TRACE("Borland style imports used\n"); - thunk_list = (PIMAGE_THUNK_DATA) RVA(pe_imp->FirstThunk); + thunk_list = get_rva(wm->module, (DWORD)pe_imp->FirstThunk); while (thunk_list->u1.Ordinal) { if (IMAGE_SNAP_BY_ORDINAL(thunk_list->u1.Ordinal)) { /* not sure about this branch, but it seems to work */ @@ -333,7 +334,7 @@ DWORD PE_fixup_imports( WINE_MODREF *wm ) thunk_list->u1.Function = (PDWORD)0xdeadbeef; } } else { - pe_name=(PIMAGE_IMPORT_BY_NAME) RVA(thunk_list->u1.AddressOfData); + pe_name=get_rva(wm->module, (DWORD)thunk_list->u1.AddressOfData); TRACE("--- %s %s.%d\n", pe_name->Name,name,pe_name->Hint); thunk_list->u1.Function=(PDWORD)MODULE_GetProcAddress( @@ -411,7 +412,6 @@ HMODULE PE_LoadImage( HANDLE hFile, LPCSTR filename, DWORD flags ) WINE_MODREF *PE_CreateModule( HMODULE hModule, LPCSTR filename, DWORD flags, HANDLE hFile, BOOL builtin ) { - DWORD load_addr = (DWORD)hModule; /* for RVA */ IMAGE_NT_HEADERS *nt; IMAGE_DATA_DIRECTORY *dir; IMAGE_EXPORT_DIRECTORY *pe_export = NULL; @@ -422,8 +422,7 @@ WINE_MODREF *PE_CreateModule( HMODULE hModule, LPCSTR filename, DWORD flags, nt = RtlImageNtHeader(hModule); dir = nt->OptionalHeader.DataDirectory+IMAGE_DIRECTORY_ENTRY_EXPORT; - if (dir->Size) - pe_export = (PIMAGE_EXPORT_DIRECTORY)RVA(dir->VirtualAddress); + if (dir->Size) pe_export = get_rva(hModule, dir->VirtualAddress); dir = nt->OptionalHeader.DataDirectory+IMAGE_DIRECTORY_ENTRY_EXCEPTION; if (dir->Size) FIXME("Exception directory ignored\n" ); @@ -451,29 +450,29 @@ WINE_MODREF *PE_CreateModule( HMODULE hModule, LPCSTR filename, DWORD flags, dir = nt->OptionalHeader.DataDirectory+IMAGE_DIRECTORY_ENTRY_DELAY_IMPORT; if (dir->Size) { - TRACE("Delayed import, stub calls LoadLibrary\n" ); - /* - * Nothing to do here. - */ + TRACE("Delayed import, stub calls LoadLibrary\n" ); + /* + * Nothing to do here. + */ #ifdef ImgDelayDescr - /* - * This code is useful to observe what the heck is going on. - */ - { - ImgDelayDescr *pe_delay = NULL; - pe_delay = (PImgDelayDescr)RVA(dir->VirtualAddress); - TRACE_(delayhlp)("pe_delay->grAttrs = %08x\n", pe_delay->grAttrs); - TRACE_(delayhlp)("pe_delay->szName = %s\n", pe_delay->szName); - TRACE_(delayhlp)("pe_delay->phmod = %08x\n", pe_delay->phmod); - TRACE_(delayhlp)("pe_delay->pIAT = %08x\n", pe_delay->pIAT); - TRACE_(delayhlp)("pe_delay->pINT = %08x\n", pe_delay->pINT); - TRACE_(delayhlp)("pe_delay->pBoundIAT = %08x\n", pe_delay->pBoundIAT); - TRACE_(delayhlp)("pe_delay->pUnloadIAT = %08x\n", pe_delay->pUnloadIAT); - TRACE_(delayhlp)("pe_delay->dwTimeStamp = %08x\n", pe_delay->dwTimeStamp); + /* + * This code is useful to observe what the heck is going on. + */ + { + ImgDelayDescr *pe_delay = NULL; + pe_delay = get_rva(hModule, dir->VirtualAddress); + TRACE_(delayhlp)("pe_delay->grAttrs = %08x\n", pe_delay->grAttrs); + TRACE_(delayhlp)("pe_delay->szName = %s\n", pe_delay->szName); + TRACE_(delayhlp)("pe_delay->phmod = %08x\n", pe_delay->phmod); + TRACE_(delayhlp)("pe_delay->pIAT = %08x\n", pe_delay->pIAT); + TRACE_(delayhlp)("pe_delay->pINT = %08x\n", pe_delay->pINT); + TRACE_(delayhlp)("pe_delay->pBoundIAT = %08x\n", pe_delay->pBoundIAT); + TRACE_(delayhlp)("pe_delay->pUnloadIAT = %08x\n", pe_delay->pUnloadIAT); + TRACE_(delayhlp)("pe_delay->dwTimeStamp = %08x\n", pe_delay->dwTimeStamp); } #endif /* ImgDelayDescr */ - } + } dir = nt->OptionalHeader.DataDirectory+IMAGE_DIRECTORY_ENTRY_COM_DESCRIPTOR; if (dir->Size) FIXME("Unknown directory 14 ignored\n" ); diff --git a/objects/font.c b/objects/font.c index 55bc4f21f57..af19df89ce7 100644 --- a/objects/font.c +++ b/objects/font.c @@ -469,7 +469,7 @@ static HGDIOBJ FONT_SelectObject( HGDIOBJ handle, void *obj, HDC hdc ) if (ret && dc->gdiFont) dc->gdiFont = 0; - if (ret == GDI_ERROR) + if (ret == HGDI_ERROR) ret = 0; /* SelectObject returns 0 on error */ else { diff --git a/objects/gdiobj.c b/objects/gdiobj.c index 8c1e140e113..caac2581ba1 100644 --- a/objects/gdiobj.c +++ b/objects/gdiobj.c @@ -726,7 +726,7 @@ void *GDI_ReallocObject( WORD size, HGDIOBJ handle, void *object ) { HGDIOBJ new_handle; - if (handle & 2) /* GDI heap handle */ + if ((UINT_PTR)handle & 2) /* GDI heap handle */ { LOCAL_Unlock( GDI_HeapSel, handle ); if ((new_handle = LOCAL_ReAlloc( GDI_HeapSel, handle, size, LMEM_MOVEABLE ))) @@ -764,7 +764,7 @@ BOOL GDI_FreeObject( HGDIOBJ handle, void *ptr ) object->wMagic = 0; /* Mark it as invalid */ object->funcs = NULL; - if (handle & 2) /* GDI heap handle */ + if ((UINT_PTR)handle & 2) /* GDI heap handle */ { LOCAL_Unlock( GDI_HeapSel, handle ); LOCAL_Free( GDI_HeapSel, handle ); @@ -798,7 +798,7 @@ void *GDI_GetObjPtr( HGDIOBJ handle, WORD magic ) _EnterSysLevel( &GDI_level ); - if (handle & 2) /* GDI heap handle */ + if ((UINT_PTR)handle & 2) /* GDI heap handle */ { ptr = (GDIOBJHDR *)LOCAL_Lock( GDI_HeapSel, handle ); if (ptr) @@ -814,7 +814,7 @@ void *GDI_GetObjPtr( HGDIOBJ handle, WORD magic ) } else /* large heap handle */ { - int i = (handle >> 2) - FIRST_LARGE_HANDLE; + int i = ((UINT_PTR)handle >> 2) - FIRST_LARGE_HANDLE; if (i >= 0 && i < MAX_LARGE_HANDLES) { ptr = large_handles[i]; @@ -840,7 +840,7 @@ void *GDI_GetObjPtr( HGDIOBJ handle, WORD magic ) */ void GDI_ReleaseObj( HGDIOBJ handle ) { - if (handle & 2) LOCAL_Unlock( GDI_HeapSel, handle ); + if ((UINT_PTR)handle & 2) LOCAL_Unlock( GDI_HeapSel, handle ); TRACE_SEC( handle, "leave" ); _LeaveSysLevel( &GDI_level ); }