annotate loader/wine/pe_image.h @ 29784:a71d9cd6f01f

Add cast to signed for 64 bit check, since according to an FFmpeg bug report some compilers (llvm?) do not fail when arrays larger than the maximum addressable size are declared but instead just silently generate broken code.
author reimar
date Thu, 05 Nov 2009 19:05:42 +0000
parents 9e739bdb049c
children 437b251e4194
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
26045
a8ea87c71d18 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25794
diff changeset
1 #ifndef MPLAYER_PE_IMAGE_H
a8ea87c71d18 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25794
diff changeset
2 #define MPLAYER_PE_IMAGE_H
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
3
7386
174e2a58b4cd avifile sync - 95% cosmetics 5% bug
arpi
parents: 1
diff changeset
4 #include "winnt.h"
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
5 #include "winbase.h"
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
6
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
7 #define PE_HEADER(module) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
8 ((IMAGE_NT_HEADERS*)((LPBYTE)(module) + \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
9 (((IMAGE_DOS_HEADER*)(module))->e_lfanew)))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
10
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
11 #define PE_SECTIONS(module) \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
12 ((IMAGE_SECTION_HEADER*)((LPBYTE)&PE_HEADER(module)->OptionalHeader + \
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
13 PE_HEADER(module)->FileHeader.SizeOfOptionalHeader))
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
14
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
15 #define RVA_PTR(module,field) ((LPBYTE)(module) + PE_HEADER(module)->field)
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
16
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
17 /* modreference used for attached processes
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
18 * all section are calculated here, relocations etc.
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
19 */
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
20 typedef struct {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
21 PIMAGE_IMPORT_DESCRIPTOR pe_import;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
22 PIMAGE_EXPORT_DIRECTORY pe_export;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
23 PIMAGE_RESOURCE_DIRECTORY pe_resource;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
24 int tlsindex;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
25 } PE_MODREF;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
26
25794
2c8cdb9123b8 Fix a ton of illegal identifiers. Identifiers starting with __ or _ and a
diego
parents: 24422
diff changeset
27 struct wine_modref;
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
28 int PE_unloadImage(HMODULE hModule);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
29 FARPROC PE_FindExportedFunction(struct wine_modref *wm, LPCSTR funcName, WIN_BOOL snoop);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
30 WIN_BOOL PE_EnumResourceTypesA(HMODULE, ENUMRESTYPEPROCA, LONG);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
31 WIN_BOOL PE_EnumResourceTypesW(HMODULE, ENUMRESTYPEPROCW, LONG);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
32 WIN_BOOL PE_EnumResourceNamesA(HMODULE, LPCSTR, ENUMRESNAMEPROCA, LONG);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
33 WIN_BOOL PE_EnumResourceNamesW(HMODULE, LPCWSTR, ENUMRESNAMEPROCW, LONG);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
34 WIN_BOOL PE_EnumResourceLanguagesA(HMODULE, LPCSTR, LPCSTR, ENUMRESLANGPROCA, LONG);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
35 WIN_BOOL PE_EnumResourceLanguagesW(HMODULE, LPCWSTR, LPCWSTR, ENUMRESLANGPROCW, LONG);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
36 HRSRC PE_FindResourceExW(struct wine_modref*, LPCWSTR, LPCWSTR, WORD);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
37 DWORD PE_SizeofResource(HMODULE, HRSRC);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
38 struct wine_modref *PE_LoadLibraryExA(LPCSTR, DWORD);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
39 void PE_UnloadLibrary(struct wine_modref *);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
40 HGLOBAL PE_LoadResource(struct wine_modref *wm, HRSRC);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
41 HMODULE PE_LoadImage(int hFile, LPCSTR filename, WORD *version);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
42 struct wine_modref *PE_CreateModule(HMODULE hModule, LPCSTR filename,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
43 DWORD flags, WIN_BOOL builtin);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
44 WIN_BOOL PE_CreateProcess(HANDLE hFile, LPCSTR filename, LPCSTR cmd_line, LPCSTR env,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
45 LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
46 WIN_BOOL inherit, DWORD flags, LPSTARTUPINFOA startup,
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
47 LPPROCESS_INFORMATION info);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
48
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
49 void PE_InitTls(void);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
50 WIN_BOOL PE_InitDLL(struct wine_modref *wm, DWORD type, LPVOID lpReserved);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
51
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
52 PIMAGE_RESOURCE_DIRECTORY GetResDirEntryA(PIMAGE_RESOURCE_DIRECTORY, LPCSTR, DWORD, WIN_BOOL);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
53 PIMAGE_RESOURCE_DIRECTORY GetResDirEntryW(PIMAGE_RESOURCE_DIRECTORY, LPCWSTR, DWORD, WIN_BOOL);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
54
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
55 typedef DWORD CALLBACK (*DLLENTRYPROC)(HMODULE,DWORD,LPVOID);
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
56
24406
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
57 typedef struct {
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
58 WORD popl WINE_PACKED; /* 0x8f 0x05 */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
59 DWORD addr_popped WINE_PACKED;/* ... */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
60 BYTE pushl1 WINE_PACKED; /* 0x68 */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
61 DWORD newret WINE_PACKED; /* ... */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
62 BYTE pushl2 WINE_PACKED; /* 0x68 */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
63 DWORD origfun WINE_PACKED; /* original function */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
64 BYTE ret1 WINE_PACKED; /* 0xc3 */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
65 WORD addesp WINE_PACKED; /* 0x83 0xc4 */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
66 BYTE nrofargs WINE_PACKED; /* nr of arguments to add esp, */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
67 BYTE pushl3 WINE_PACKED; /* 0x68 */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
68 DWORD oldret WINE_PACKED; /* Filled out from popl above */
a422b6c96368 Revert r24424.
voroshil
parents: 24404
diff changeset
69 BYTE ret2 WINE_PACKED; /* 0xc3 */
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
70 } ELF_STDCALL_STUB;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
71
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
72 typedef struct {
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
73 void* dlhandle;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
74 ELF_STDCALL_STUB *stubs;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
75 } ELF_MODREF;
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
76
28051
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
77 struct wine_modref *ELF_LoadLibraryExA( LPCSTR libname, DWORD flags);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
78 void ELF_UnloadLibrary(struct wine_modref *);
9e739bdb049c Get rid of pointless 'extern' keywords.
diego
parents: 26045
diff changeset
79 FARPROC ELF_FindExportedFunction(struct wine_modref *wm, LPCSTR funcName);
1
3b5f5d1c5041 Initial revision
arpi_esp
parents:
diff changeset
80
26045
a8ea87c71d18 Add MPLAYER_ prefix to multiple inclusion guards.
diego
parents: 25794
diff changeset
81 #endif /* MPLAYER_PE_IMAGE_H */