Alexandre Julliard | 594997c | 1995-04-30 10:05:20 +0000 | [diff] [blame] | 1 | /* |
| 2 | * Module definitions |
| 3 | * |
| 4 | * Copyright 1995 Alexandre Julliard |
| 5 | */ |
| 6 | |
Alexandre Julliard | c6c0944 | 1997-01-12 18:32:19 +0000 | [diff] [blame] | 7 | #ifndef __WINE_MODULE_H |
| 8 | #define __WINE_MODULE_H |
Alexandre Julliard | 594997c | 1995-04-30 10:05:20 +0000 | [diff] [blame] | 9 | |
Jim Aston | 2e1cafa | 1999-03-14 16:35:05 +0000 | [diff] [blame] | 10 | #include "windef.h" |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 11 | #include "winbase.h" |
Alexandre Julliard | 83f52d1 | 2000-09-26 22:20:14 +0000 | [diff] [blame] | 12 | #include "wine/windef16.h" |
Alexandre Julliard | 767e6f6 | 1998-08-09 12:47:43 +0000 | [diff] [blame] | 13 | |
Alexandre Julliard | 594997c | 1995-04-30 10:05:20 +0000 | [diff] [blame] | 14 | /* In-memory module structure. See 'Windows Internals' p. 219 */ |
Alexandre Julliard | c7c217b | 1998-04-13 12:21:30 +0000 | [diff] [blame] | 15 | typedef struct _NE_MODULE |
Alexandre Julliard | 594997c | 1995-04-30 10:05:20 +0000 | [diff] [blame] | 16 | { |
Alexandre Julliard | 329f068 | 1996-04-14 13:21:20 +0000 | [diff] [blame] | 17 | WORD magic; /* 00 'NE' signature */ |
| 18 | WORD count; /* 02 Usage count */ |
| 19 | WORD entry_table; /* 04 Near ptr to entry table */ |
Alexandre Julliard | 3051b64 | 1996-07-05 17:14:13 +0000 | [diff] [blame] | 20 | HMODULE16 next; /* 06 Selector to next module */ |
Alexandre Julliard | 329f068 | 1996-04-14 13:21:20 +0000 | [diff] [blame] | 21 | WORD dgroup_entry; /* 08 Near ptr to segment entry for DGROUP */ |
| 22 | WORD fileinfo; /* 0a Near ptr to file info (OFSTRUCT) */ |
| 23 | WORD flags; /* 0c Module flags */ |
| 24 | WORD dgroup; /* 0e Logical segment for DGROUP */ |
| 25 | WORD heap_size; /* 10 Initial heap size */ |
| 26 | WORD stack_size; /* 12 Initial stack size */ |
| 27 | WORD ip; /* 14 Initial ip */ |
| 28 | WORD cs; /* 16 Initial cs (logical segment) */ |
| 29 | WORD sp; /* 18 Initial stack pointer */ |
| 30 | WORD ss; /* 1a Initial ss (logical segment) */ |
| 31 | WORD seg_count; /* 1c Number of segments in segment table */ |
| 32 | WORD modref_count; /* 1e Number of module references */ |
| 33 | WORD nrname_size; /* 20 Size of non-resident names table */ |
| 34 | WORD seg_table; /* 22 Near ptr to segment table */ |
| 35 | WORD res_table; /* 24 Near ptr to resource table */ |
| 36 | WORD name_table; /* 26 Near ptr to resident names table */ |
| 37 | WORD modref_table; /* 28 Near ptr to module reference table */ |
| 38 | WORD import_table; /* 2a Near ptr to imported names table */ |
| 39 | DWORD nrname_fpos; /* 2c File offset of non-resident names table */ |
| 40 | WORD moveable_entries; /* 30 Number of moveable entries in entry table*/ |
| 41 | WORD alignment; /* 32 Alignment shift count */ |
| 42 | WORD truetype; /* 34 Set to 2 if TrueType font */ |
| 43 | BYTE os_flags; /* 36 Operating system flags */ |
| 44 | BYTE misc_flags; /* 37 Misc. flags */ |
Alexandre Julliard | 3051b64 | 1996-07-05 17:14:13 +0000 | [diff] [blame] | 45 | HANDLE16 dlls_to_init; /* 38 List of DLLs to initialize */ |
| 46 | HANDLE16 nrname_handle; /* 3a Handle to non-resident name table */ |
Alexandre Julliard | 329f068 | 1996-04-14 13:21:20 +0000 | [diff] [blame] | 47 | WORD min_swap_area; /* 3c Min. swap area size */ |
| 48 | WORD expected_version; /* 3e Expected Windows version */ |
| 49 | /* From here, these are extra fields not present in normal Windows */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 50 | HMODULE module32; /* 40 PE module handle for Win32 modules */ |
Alexandre Julliard | 3051b64 | 1996-07-05 17:14:13 +0000 | [diff] [blame] | 51 | HMODULE16 self; /* 44 Handle for this module */ |
Alexandre Julliard | 329f068 | 1996-04-14 13:21:20 +0000 | [diff] [blame] | 52 | WORD self_loading_sel; /* 46 Selector used for self-loading apps. */ |
Ulrich Weigand | 80a69b6 | 1998-11-25 17:58:51 +0000 | [diff] [blame] | 53 | LPVOID hRsrcMap; /* HRSRC 16->32 map (for 32-bit modules) */ |
Alexandre Julliard | 594997c | 1995-04-30 10:05:20 +0000 | [diff] [blame] | 54 | } NE_MODULE; |
| 55 | |
Alexandre Julliard | 8664b89 | 1996-04-05 14:58:24 +0000 | [diff] [blame] | 56 | |
Andreas Mohr | dca5e56 | 1999-04-16 08:17:17 +0000 | [diff] [blame] | 57 | typedef struct { |
| 58 | BYTE type; |
| 59 | BYTE flags; |
| 60 | BYTE segnum; |
| 61 | WORD offs WINE_PACKED; |
| 62 | } ET_ENTRY; |
| 63 | |
| 64 | typedef struct { |
| 65 | WORD first; /* ordinal */ |
| 66 | WORD last; /* ordinal */ |
| 67 | WORD next; /* bundle */ |
| 68 | } ET_BUNDLE; |
| 69 | |
| 70 | |
Alexandre Julliard | 594997c | 1995-04-30 10:05:20 +0000 | [diff] [blame] | 71 | /* In-memory segment table */ |
| 72 | typedef struct |
| 73 | { |
Alexandre Julliard | 3051b64 | 1996-07-05 17:14:13 +0000 | [diff] [blame] | 74 | WORD filepos; /* Position in file, in sectors */ |
| 75 | WORD size; /* Segment size on disk */ |
| 76 | WORD flags; /* Segment flags */ |
| 77 | WORD minsize; /* Min. size of segment in memory */ |
Alexandre Julliard | d30dfd2 | 1998-09-27 18:28:36 +0000 | [diff] [blame] | 78 | HANDLE16 hSeg; /* Selector or handle (selector - 1) */ |
| 79 | /* of segment in memory */ |
Alexandre Julliard | 594997c | 1995-04-30 10:05:20 +0000 | [diff] [blame] | 80 | } SEGTABLEENTRY; |
| 81 | |
Alexandre Julliard | 8664b89 | 1996-04-05 14:58:24 +0000 | [diff] [blame] | 82 | |
Alexandre Julliard | ff8331e | 1995-09-18 11:19:54 +0000 | [diff] [blame] | 83 | /* Self-loading modules contain this structure in their first segment */ |
| 84 | |
Patrik Stridvall | c7a8dde | 1999-04-25 12:36:53 +0000 | [diff] [blame] | 85 | #include "pshpack1.h" |
Alexandre Julliard | a845b88 | 1998-06-01 10:44:35 +0000 | [diff] [blame] | 86 | |
Alexandre Julliard | ff8331e | 1995-09-18 11:19:54 +0000 | [diff] [blame] | 87 | typedef struct |
| 88 | { |
Andreas Mohr | e6c12ee | 1998-10-11 17:36:46 +0000 | [diff] [blame] | 89 | WORD version; /* Must be "A0" (0x3041) */ |
Alexandre Julliard | 3051b64 | 1996-07-05 17:14:13 +0000 | [diff] [blame] | 90 | WORD reserved; |
| 91 | FARPROC16 BootApp; /* startup procedure */ |
| 92 | FARPROC16 LoadAppSeg; /* procedure to load a segment */ |
| 93 | FARPROC16 reserved2; |
| 94 | FARPROC16 MyAlloc; /* memory allocation procedure, |
| 95 | * wine must write this field */ |
| 96 | FARPROC16 EntryAddrProc; |
| 97 | FARPROC16 ExitProc; /* exit procedure */ |
| 98 | WORD reserved3[4]; |
| 99 | FARPROC16 SetOwner; /* Set Owner procedure, exported by wine */ |
Alexandre Julliard | ff8331e | 1995-09-18 11:19:54 +0000 | [diff] [blame] | 100 | } SELFLOADHEADER; |
| 101 | |
Alexandre Julliard | ca22b33 | 1996-07-12 19:02:39 +0000 | [diff] [blame] | 102 | /* Parameters for LoadModule() */ |
Alexandre Julliard | 2787be8 | 1995-05-22 18:23:01 +0000 | [diff] [blame] | 103 | typedef struct |
| 104 | { |
Alexandre Julliard | bf9130a | 1996-10-13 17:45:47 +0000 | [diff] [blame] | 105 | HGLOBAL16 hEnvironment; /* Environment segment */ |
| 106 | SEGPTR cmdLine WINE_PACKED; /* Command-line */ |
| 107 | SEGPTR showCmd WINE_PACKED; /* Code for ShowWindow() */ |
| 108 | SEGPTR reserved WINE_PACKED; |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 109 | } LOADPARAMS16; |
Alexandre Julliard | 594997c | 1995-04-30 10:05:20 +0000 | [diff] [blame] | 110 | |
Alexandre Julliard | a11d7b1 | 1998-03-01 20:05:02 +0000 | [diff] [blame] | 111 | typedef struct |
| 112 | { |
| 113 | LPSTR lpEnvAddress; |
| 114 | LPSTR lpCmdLine; |
Alexandre Julliard | 85ed45e | 1998-08-22 19:03:56 +0000 | [diff] [blame] | 115 | UINT16 *lpCmdShow; |
Alexandre Julliard | a11d7b1 | 1998-03-01 20:05:02 +0000 | [diff] [blame] | 116 | DWORD dwReserved; |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 117 | } LOADPARAMS; |
Alexandre Julliard | a11d7b1 | 1998-03-01 20:05:02 +0000 | [diff] [blame] | 118 | |
Patrik Stridvall | c7a8dde | 1999-04-25 12:36:53 +0000 | [diff] [blame] | 119 | #include "poppack.h" |
Alexandre Julliard | ca22b33 | 1996-07-12 19:02:39 +0000 | [diff] [blame] | 120 | |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 121 | /* internal representation of 32bit modules. per process. */ |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 122 | typedef struct _wine_modref |
| 123 | { |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 124 | struct _wine_modref *next; |
| 125 | struct _wine_modref *prev; |
| 126 | HMODULE module; |
Andreas Mohr | cabee39 | 2000-10-25 21:22:27 +0000 | [diff] [blame] | 127 | HMODULE16 hDummyMod; /* Win16 dummy module */ |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 128 | void *dlhandle; /* handle returned by dlopen() */ |
| 129 | int tlsindex; /* TLS index or -1 if none */ |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 130 | |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 131 | FARPROC (*find_export)( struct _wine_modref *wm, LPCSTR func, BOOL snoop ); |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 132 | |
Ulrich Weigand | a3527cf | 1998-10-11 19:31:10 +0000 | [diff] [blame] | 133 | int nDeps; |
| 134 | struct _wine_modref **deps; |
Ulrich Weigand | e469a58 | 1999-03-27 16:45:57 +0000 | [diff] [blame] | 135 | |
| 136 | int flags; |
| 137 | int refCount; |
Ulrich Weigand | a3527cf | 1998-10-11 19:31:10 +0000 | [diff] [blame] | 138 | |
Ulrich Weigand | 237e8e9 | 1999-12-04 04:04:58 +0000 | [diff] [blame] | 139 | char *filename; |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 140 | char *modname; |
Ulrich Weigand | 237e8e9 | 1999-12-04 04:04:58 +0000 | [diff] [blame] | 141 | char *short_filename; |
| 142 | char *short_modname; |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 143 | } WINE_MODREF; |
| 144 | |
Ulrich Weigand | e469a58 | 1999-03-27 16:45:57 +0000 | [diff] [blame] | 145 | #define WINE_MODREF_INTERNAL 0x00000001 |
| 146 | #define WINE_MODREF_NO_DLL_CALLS 0x00000002 |
| 147 | #define WINE_MODREF_PROCESS_ATTACHED 0x00000004 |
Ulrich Weigand | e469a58 | 1999-03-27 16:45:57 +0000 | [diff] [blame] | 148 | #define WINE_MODREF_DONT_RESOLVE_REFS 0x00000020 |
| 149 | #define WINE_MODREF_MARKER 0x80000000 |
| 150 | |
| 151 | |
Alexandre Julliard | 2ace16a | 1996-04-28 15:09:19 +0000 | [diff] [blame] | 152 | /* Resource types */ |
| 153 | typedef struct resource_typeinfo_s NE_TYPEINFO; |
| 154 | typedef struct resource_nameinfo_s NE_NAMEINFO; |
| 155 | |
Alexandre Julliard | 594997c | 1995-04-30 10:05:20 +0000 | [diff] [blame] | 156 | #define NE_SEG_TABLE(pModule) \ |
| 157 | ((SEGTABLEENTRY *)((char *)(pModule) + (pModule)->seg_table)) |
| 158 | |
| 159 | #define NE_MODULE_TABLE(pModule) \ |
| 160 | ((WORD *)((char *)(pModule) + (pModule)->modref_table)) |
| 161 | |
Alexandre Julliard | 02ed4c2 | 1996-03-02 19:34:10 +0000 | [diff] [blame] | 162 | #define NE_MODULE_NAME(pModule) \ |
| 163 | (((OFSTRUCT *)((char*)(pModule) + (pModule)->fileinfo))->szPathName) |
| 164 | |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 165 | #define PE_HEADER(module) \ |
| 166 | ((IMAGE_NT_HEADERS*)((LPBYTE)(module) + \ |
| 167 | (((IMAGE_DOS_HEADER*)(module))->e_lfanew))) |
| 168 | |
| 169 | #define PE_SECTIONS(module) \ |
| 170 | ((IMAGE_SECTION_HEADER*)((LPBYTE)&PE_HEADER(module)->OptionalHeader + \ |
| 171 | PE_HEADER(module)->FileHeader.SizeOfOptionalHeader)) |
| 172 | |
Alexandre Julliard | 2ace16a | 1996-04-28 15:09:19 +0000 | [diff] [blame] | 173 | /* module.c */ |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 174 | extern WINE_MODREF *MODULE_AllocModRef( HMODULE hModule, LPCSTR filename ); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 175 | extern FARPROC MODULE_GetProcAddress( HMODULE hModule, LPCSTR function, BOOL snoop ); |
Bertho Stultiens | c1d1cfe | 1999-04-18 12:14:06 +0000 | [diff] [blame] | 176 | extern BOOL MODULE_DllProcessAttach( WINE_MODREF *wm, LPVOID lpReserved ); |
| 177 | extern void MODULE_DllProcessDetach( BOOL bForceDetach, LPVOID lpReserved ); |
| 178 | extern void MODULE_DllThreadAttach( LPVOID lpReserved ); |
| 179 | extern void MODULE_DllThreadDetach( LPVOID lpReserved ); |
| 180 | extern WINE_MODREF *MODULE_LoadLibraryExA( LPCSTR libname, HFILE hfile, DWORD flags ); |
| 181 | extern BOOL MODULE_FreeLibrary( WINE_MODREF *wm ); |
| 182 | extern WINE_MODREF *MODULE_FindModule( LPCSTR path ); |
Alexandre Julliard | c192ba2 | 2000-05-29 21:25:10 +0000 | [diff] [blame] | 183 | extern BOOL MODULE_GetBinaryType( HANDLE hfile, LPCSTR filename, LPDWORD lpBinaryType ); |
Alexandre Julliard | b445952 | 2000-04-15 21:00:55 +0000 | [diff] [blame] | 184 | extern HMODULE MODULE_CreateDummyModule( LPCSTR filename, HMODULE module32 ); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 185 | extern FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE hmodule, LPCSTR name ); |
| 186 | extern SEGPTR WINAPI HasGPHandler16( SEGPTR address ); |
Guy Albertelli | 0e65b38 | 1999-06-12 10:49:36 +0000 | [diff] [blame] | 187 | extern void MODULE_WalkModref( DWORD id ); |
Alexandre Julliard | 2787be8 | 1995-05-22 18:23:01 +0000 | [diff] [blame] | 188 | |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 189 | /* loader/ne/module.c */ |
Alexandre Julliard | dadf78f | 1998-05-17 17:13:43 +0000 | [diff] [blame] | 190 | extern NE_MODULE *NE_GetPtr( HMODULE16 hModule ); |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 191 | extern void NE_DumpModule( HMODULE16 hModule ); |
| 192 | extern void NE_WalkModules(void); |
| 193 | extern void NE_RegisterModule( NE_MODULE *pModule ); |
| 194 | extern WORD NE_GetOrdinal( HMODULE16 hModule, const char *name ); |
Uwe Bonnes | e5266e8 | 1999-07-15 16:09:05 +0000 | [diff] [blame] | 195 | extern FARPROC16 WINAPI NE_GetEntryPoint( HMODULE16 hModule, WORD ordinal ); |
Ulrich Weigand | a3527cf | 1998-10-11 19:31:10 +0000 | [diff] [blame] | 196 | extern FARPROC16 NE_GetEntryPointEx( HMODULE16 hModule, WORD ordinal, BOOL16 snoop ); |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 197 | extern BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset ); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 198 | extern HANDLE NE_OpenFile( NE_MODULE *pModule ); |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 199 | |
| 200 | /* loader/ne/resource.c */ |
| 201 | extern HGLOBAL16 WINAPI NE_DefResourceHandler(HGLOBAL16,HMODULE16,HRSRC16); |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 202 | extern BOOL NE_InitResourceHandler( HMODULE16 hModule ); |
Ulrich Weigand | 80a69b6 | 1998-11-25 17:58:51 +0000 | [diff] [blame] | 203 | extern HRSRC16 NE_FindResource( NE_MODULE *pModule, LPCSTR name, LPCSTR type ); |
Ulrich Weigand | 80a69b6 | 1998-11-25 17:58:51 +0000 | [diff] [blame] | 204 | extern DWORD NE_SizeofResource( NE_MODULE *pModule, HRSRC16 hRsrc ); |
| 205 | extern HGLOBAL16 NE_LoadResource( NE_MODULE *pModule, HRSRC16 hRsrc ); |
| 206 | extern BOOL16 NE_FreeResource( NE_MODULE *pModule, HGLOBAL16 handle ); |
Ulrich Weigand | 6d76a20 | 1999-01-31 10:13:44 +0000 | [diff] [blame] | 207 | extern NE_TYPEINFO *NE_FindTypeSection( LPBYTE pResTab, NE_TYPEINFO *pTypeInfo, LPCSTR typeId ); |
| 208 | extern NE_NAMEINFO *NE_FindResourceFromType( LPBYTE pResTab, NE_TYPEINFO *pTypeInfo, LPCSTR resId ); |
| 209 | |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 210 | /* loader/ne/segment.c */ |
Alexandre Julliard | a396029 | 1999-02-26 11:11:13 +0000 | [diff] [blame] | 211 | extern BOOL NE_LoadSegment( NE_MODULE *pModule, WORD segnum ); |
| 212 | extern BOOL NE_LoadAllSegments( NE_MODULE *pModule ); |
Ulrich Weigand | 61206bd | 1999-11-21 00:50:30 +0000 | [diff] [blame] | 213 | extern BOOL NE_CreateSegment( NE_MODULE *pModule, int segnum ); |
| 214 | extern BOOL NE_CreateAllSegments( NE_MODULE *pModule ); |
| 215 | extern HINSTANCE16 NE_GetInstance( NE_MODULE *pModule ); |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 216 | extern void NE_InitializeDLLs( HMODULE16 hModule ); |
Ulrich Weigand | 2149934 | 1999-12-05 02:50:38 +0000 | [diff] [blame] | 217 | extern void NE_DllProcessAttach( HMODULE16 hModule ); |
Alexandre Julliard | 46ea8b3 | 1998-05-03 19:01:20 +0000 | [diff] [blame] | 218 | |
Ulrich Weigand | 80a69b6 | 1998-11-25 17:58:51 +0000 | [diff] [blame] | 219 | /* loader/ne/convert.c */ |
| 220 | HGLOBAL16 NE_LoadPEResource( NE_MODULE *pModule, WORD type, LPVOID bits, DWORD size ); |
Ulrich Weigand | 80a69b6 | 1998-11-25 17:58:51 +0000 | [diff] [blame] | 221 | |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 222 | /* loader/pe_resource.c */ |
Dmitry Timoshkov | 05c88fa | 2000-08-11 12:50:56 +0000 | [diff] [blame] | 223 | extern HRSRC PE_FindResourceW(HMODULE,LPCWSTR,LPCWSTR); |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 224 | extern HRSRC PE_FindResourceExW(HMODULE,LPCWSTR,LPCWSTR,WORD); |
Alexandre Julliard | 32936f0 | 2000-08-07 23:50:00 +0000 | [diff] [blame] | 225 | extern DWORD PE_SizeofResource(HRSRC); |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 226 | extern HGLOBAL PE_LoadResource(HMODULE,HRSRC); |
Alexandre Julliard | 081ee94 | 2000-08-07 04:12:41 +0000 | [diff] [blame] | 227 | |
| 228 | /* loader/pe_image.c */ |
| 229 | extern WINE_MODREF *PE_LoadLibraryExA(LPCSTR, DWORD); |
| 230 | extern HMODULE PE_LoadImage( HANDLE hFile, LPCSTR filename, DWORD flags ); |
| 231 | extern WINE_MODREF *PE_CreateModule( HMODULE hModule, LPCSTR filename, |
| 232 | DWORD flags, HFILE hFile, BOOL builtin ); |
| 233 | extern void PE_InitTls(void); |
| 234 | extern BOOL PE_InitDLL( HMODULE module, DWORD type, LPVOID lpReserved ); |
| 235 | |
| 236 | /* loader/elf.c */ |
| 237 | extern WINE_MODREF *ELF_LoadLibraryExA( LPCSTR libname, DWORD flags); |
| 238 | |
Alexandre Julliard | 60ce85c | 1998-02-01 18:33:27 +0000 | [diff] [blame] | 239 | /* relay32/builtin.c */ |
Alexandre Julliard | 05f0b71 | 2000-03-09 18:18:41 +0000 | [diff] [blame] | 240 | extern WINE_MODREF *BUILTIN32_LoadLibraryExA(LPCSTR name, DWORD flags); |
Alexandre Julliard | a37dec0 | 2000-06-08 00:57:24 +0000 | [diff] [blame] | 241 | extern HMODULE BUILTIN32_LoadExeModule(void); |
Alexandre Julliard | e1e7537 | 2000-04-24 17:17:49 +0000 | [diff] [blame] | 242 | extern void *BUILTIN32_dlopen( const char *name ); |
| 243 | extern int BUILTIN32_dlclose( void *handle ); |
Alexandre Julliard | 60ce85c | 1998-02-01 18:33:27 +0000 | [diff] [blame] | 244 | |
Alexandre Julliard | c6c0944 | 1997-01-12 18:32:19 +0000 | [diff] [blame] | 245 | #endif /* __WINE_MODULE_H */ |