diff options
Diffstat (limited to 'loader/wine/module.h')
-rw-r--r-- | loader/wine/module.h | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/loader/wine/module.h b/loader/wine/module.h new file mode 100644 index 0000000000..7237c95f06 --- /dev/null +++ b/loader/wine/module.h @@ -0,0 +1,198 @@ +/* + * Module definitions + * + * Copyright 1995 Alexandre Julliard + */ + +#ifndef __WINE_MODULE_H +#define __WINE_MODULE_H + +#include "windef.h" +//#include "dosexe.h" +#include "pe_image.h" + + + +typedef struct { + BYTE type; + BYTE flags; + BYTE segnum; + WORD offs WINE_PACKED; +} ET_ENTRY; + +typedef struct { + WORD first; /* ordinal */ + WORD last; /* ordinal */ + WORD next; /* bundle */ +} ET_BUNDLE; + + + /* In-memory segment table */ +typedef struct +{ + WORD filepos; /* Position in file, in sectors */ + WORD size; /* Segment size on disk */ + WORD flags; /* Segment flags */ + WORD minsize; /* Min. size of segment in memory */ + HANDLE16 hSeg; /* Selector or handle (selector - 1) */ + /* of segment in memory */ +} SEGTABLEENTRY; + + + /* Self-loading modules contain this structure in their first segment */ + +#include "pshpack1.h" + +typedef struct +{ + WORD version; /* Must be "A0" (0x3041) */ + WORD reserved; + FARPROC16 BootApp; /* startup procedure */ + FARPROC16 LoadAppSeg; /* procedure to load a segment */ + FARPROC16 reserved2; + FARPROC16 MyAlloc; /* memory allocation procedure, + * wine must write this field */ + FARPROC16 EntryAddrProc; + FARPROC16 ExitProc; /* exit procedure */ + WORD reserved3[4]; + FARPROC16 SetOwner; /* Set Owner procedure, exported by wine */ +} SELFLOADHEADER; + + /* Parameters for LoadModule() */ +typedef struct +{ + HGLOBAL16 hEnvironment; /* Environment segment */ + SEGPTR cmdLine WINE_PACKED; /* Command-line */ + SEGPTR showCmd WINE_PACKED; /* Code for ShowWindow() */ + SEGPTR reserved WINE_PACKED; +} LOADPARAMS16; + +typedef struct +{ + LPSTR lpEnvAddress; + LPSTR lpCmdLine; + UINT16 *lpCmdShow; + DWORD dwReserved; +} LOADPARAMS; + +#include "poppack.h" + +/* internal representation of 32bit modules. per process. */ +typedef enum { + MODULE32_PE = 1, + MODULE32_ELF, + MODULE32_ELFDLL +} MODULE32_TYPE; + +typedef struct _wine_modref +{ + struct _wine_modref *next; + struct _wine_modref *prev; + MODULE32_TYPE type; + union { + PE_MODREF pe; + ELF_MODREF elf; + } binfmt; + + HMODULE module; + + int nDeps; + struct _wine_modref **deps; + + int flags; + int refCount; + + char *filename; + char *modname; + char *short_filename; + char *short_modname; +} WINE_MODREF; + +#define WINE_MODREF_INTERNAL 0x00000001 +#define WINE_MODREF_NO_DLL_CALLS 0x00000002 +#define WINE_MODREF_PROCESS_ATTACHED 0x00000004 +#define WINE_MODREF_LOAD_AS_DATAFILE 0x00000010 +#define WINE_MODREF_DONT_RESOLVE_REFS 0x00000020 +#define WINE_MODREF_MARKER 0x80000000 + + + +/* Resource types */ +typedef struct resource_typeinfo_s NE_TYPEINFO; +typedef struct resource_nameinfo_s NE_NAMEINFO; + +#define NE_SEG_TABLE(pModule) \ + ((SEGTABLEENTRY *)((char *)(pModule) + (pModule)->seg_table)) + +#define NE_MODULE_TABLE(pModule) \ + ((WORD *)((char *)(pModule) + (pModule)->modref_table)) + +#define NE_MODULE_NAME(pModule) \ + (((OFSTRUCT *)((char*)(pModule) + (pModule)->fileinfo))->szPathName) + +/* module.c */ +extern FARPROC MODULE_GetProcAddress( HMODULE hModule, LPCSTR function, WIN_BOOL snoop ); +extern WINE_MODREF *MODULE32_LookupHMODULE( HMODULE hModule ); +extern WIN_BOOL MODULE_DllProcessAttach( WINE_MODREF *wm, LPVOID lpReserved ); +extern void MODULE_DllProcessDetach( WINE_MODREF *wm, WIN_BOOL bForceDetach, LPVOID lpReserved ); +extern void MODULE_DllThreadAttach( LPVOID lpReserved ); +extern void MODULE_DllThreadDetach( LPVOID lpReserved ); +extern WINE_MODREF *MODULE_LoadLibraryExA( LPCSTR libname, HFILE hfile, DWORD flags ); +extern WIN_BOOL MODULE_FreeLibrary( WINE_MODREF *wm ); +extern WINE_MODREF *MODULE_FindModule( LPCSTR path ); +extern HMODULE MODULE_CreateDummyModule( LPCSTR filename, HMODULE module32 ); +extern FARPROC16 WINAPI WIN32_GetProcAddress16( HMODULE hmodule, LPCSTR name ); +extern SEGPTR WINAPI HasGPHandler16( SEGPTR address ); +extern void MODULE_WalkModref( DWORD id ); + +/* resource.c */ +extern INT WINAPI AccessResource(HMODULE,HRSRC); +/* +/ loader/ne/module.c +extern NE_MODULE *NE_GetPtr( HMODULE16 hModule ); +extern void NE_DumpModule( HMODULE16 hModule ); +extern void NE_WalkModules(void); +extern void NE_RegisterModule( NE_MODULE *pModule ); +extern WORD NE_GetOrdinal( HMODULE16 hModule, const char *name ); +extern FARPROC16 WINAPI NE_GetEntryPoint( HMODULE16 hModule, WORD ordinal ); +extern FARPROC16 NE_GetEntryPointEx( HMODULE16 hModule, WORD ordinal, WIN_BOOL16 snoop ); +extern WIN_BOOL16 NE_SetEntryPoint( HMODULE16 hModule, WORD ordinal, WORD offset ); +extern int NE_OpenFile( NE_MODULE *pModule ); +extern WIN_BOOL NE_CreateProcess( HANDLE hFile, LPCSTR filename, LPCSTR cmd_line, LPCSTR env, + LPSECURITY_ATTRIBUTES psa, LPSECURITY_ATTRIBUTES tsa, + WIN_BOOL inherit, DWORD flags, LPSTARTUPINFOA startup, + LPPROCESS_INFORMATION info ); +extern WIN_BOOL NE_InitProcess( NE_MODULE *pModule ); + + +/ loader/ne/resource.c +extern HGLOBAL16 WINAPI NE_DefResourceHandler(HGLOBAL16,HMODULE16,HRSRC16); +extern WIN_BOOL NE_InitResourceHandler( HMODULE16 hModule ); +extern HRSRC16 NE_FindResource( NE_MODULE *pModule, LPCSTR name, LPCSTR type ); +extern INT16 NE_AccessResource( NE_MODULE *pModule, HRSRC16 hRsrc ); +extern DWORD NE_SizeofResource( NE_MODULE *pModule, HRSRC16 hRsrc ); +extern HGLOBAL16 NE_LoadResource( NE_MODULE *pModule, HRSRC16 hRsrc ); +extern WIN_BOOL16 NE_FreeResource( NE_MODULE *pModule, HGLOBAL16 handle ); +extern NE_TYPEINFO *NE_FindTypeSection( LPBYTE pResTab, NE_TYPEINFO *pTypeInfo, LPCSTR typeId ); +extern NE_NAMEINFO *NE_FindResourceFromType( LPBYTE pResTab, NE_TYPEINFO *pTypeInfo, LPCSTR resId ); + +// loader/ne/segment.c +extern WIN_BOOL NE_LoadSegment( NE_MODULE *pModule, WORD segnum ); +extern WIN_BOOL NE_LoadAllSegments( NE_MODULE *pModule ); +extern WIN_BOOL NE_CreateSegment( NE_MODULE *pModule, int segnum ); +extern WIN_BOOL NE_CreateAllSegments( NE_MODULE *pModule ); +extern HINSTANCE16 NE_GetInstance( NE_MODULE *pModule ); +extern void NE_InitializeDLLs( HMODULE16 hModule ); +extern void NE_DllProcessAttach( HMODULE16 hModule ); + +// loader/ne/convert.c +HGLOBAL16 NE_LoadPEResource( NE_MODULE *pModule, WORD type, LPVOID bits, DWORD size ); +*/ +/* relay32/builtin.c */ +extern WINE_MODREF *BUILTIN32_LoadLibraryExA(LPCSTR name, DWORD flags); +extern HMODULE BUILTIN32_LoadExeModule( LPCSTR *filename ); +extern void BUILTIN32_UnloadLibrary(WINE_MODREF *wm); +extern void *BUILTIN32_dlopen( const char *name ); +extern int BUILTIN32_dlclose( void *handle ); + +#endif /* __WINE_MODULE_H */ |