4 * Copyright 1995 Alexandre Julliard
17 /* In-memory module structure. See 'Windows Internals' p. 219 */
20 WORD magic
; /* 00 'NE' signature */
21 WORD count
; /* 02 Usage count */
22 WORD entry_table
; /* 04 Near ptr to entry table */
23 HMODULE next
; /* 06 Selector to next module */
24 WORD dgroup_entry
; /* 08 Near ptr to segment entry for DGROUP */
25 WORD fileinfo
; /* 0a Near ptr to file info (OFSTRUCT) */
26 WORD flags
; /* 0c Module flags */
27 WORD dgroup
; /* 0e Logical segment for DGROUP */
28 WORD heap_size
; /* 10 Initial heap size */
29 WORD stack_size
; /* 12 Initial stack size */
30 WORD ip
; /* 14 Initial ip */
31 WORD cs
; /* 16 Initial cs (logical segment) */
32 WORD sp
; /* 18 Initial stack pointer */
33 WORD ss
; /* 1a Initial ss (logical segment) */
34 WORD seg_count
; /* 1c Number of segments in segment table */
35 WORD modref_count
; /* 1e Number of module references */
36 WORD nrname_size
; /* 20 Size of non-resident names table */
37 WORD seg_table
; /* 22 Near ptr to segment table */
38 WORD res_table
; /* 24 Near ptr to resource table */
39 WORD name_table
; /* 26 Near ptr to resident names table */
40 WORD modref_table
; /* 28 Near ptr to module reference table */
41 WORD import_table
; /* 2a Near ptr to imported names table */
42 DWORD nrname_fpos
; /* 2c File offset of non-resident names table */
43 WORD moveable_entries
; /* 30 Number of moveable entries in entry table*/
44 WORD alignment
; /* 32 Alignment shift count */
45 WORD truetype
; /* 34 Set to 2 if TrueType font */
46 BYTE os_flags
; /* 36 Operating system flags */
47 BYTE misc_flags
; /* 37 Misc. flags */
48 HANDLE dlls_to_init
; /* 38 List of DLLs to initialize */
49 HANDLE nrname_handle
; /* 3a Handle to non-resident name table */
50 WORD min_swap_area
; /* 3c Min. swap area size */
51 WORD expected_version
; /* 3e Expected Windows version */
52 /* From here, these are extra fields not present in normal Windows */
53 PE_MODULE
*pe_module
; /* 40 PE module handle for Win32 modules */
54 HMODULE self
; /* 44 Handle for this module */
55 WORD self_loading_sel
; /* 46 Selector used for self-loading apps. */
59 /* In-memory segment table */
62 WORD filepos
; /* Position in file, in sectors */
63 WORD size
; /* Segment size on disk */
64 WORD flags
; /* Segment flags */
65 WORD minsize
; /* Min. size of segment in memory */
66 HANDLE selector
; /* Selector of segment in memory */
70 /* Self-loading modules contain this structure in their first segment */
74 WORD version
; /* Must be 0xA0 */
76 FARPROC BootApp
; /* startup procedure */
77 FARPROC LoadAppSeg
; /* procedure to load a segment */
79 FARPROC MyAlloc
; /* memory allocation procedure,
80 * wine must write this field */
81 FARPROC EntryAddrProc
;
82 FARPROC ExitProc
; /* exit procedure */
84 FARPROC SetOwner
; /* Set Owner procedure, exported by wine */
87 /* Parameters for LoadModule() */
91 HANDLE hEnvironment
; /* Environment segment */
92 SEGPTR cmdLine
; /* Command-line */
93 SEGPTR showCmd
; /* Code for ShowWindow() */
98 typedef struct resource_typeinfo_s NE_TYPEINFO
;
99 typedef struct resource_nameinfo_s NE_NAMEINFO
;
101 #define NE_SEG_TABLE(pModule) \
102 ((SEGTABLEENTRY *)((char *)(pModule) + (pModule)->seg_table))
104 #define NE_MODULE_TABLE(pModule) \
105 ((WORD *)((char *)(pModule) + (pModule)->modref_table))
107 #define NE_MODULE_NAME(pModule) \
108 (((OFSTRUCT *)((char*)(pModule) + (pModule)->fileinfo))->szPathName)
110 #define NE_WIN32_MODULE(pModule) \
111 ((struct pe_data *)(((pModule)->flags & NE_FFLAGS_WIN32) ? \
112 ((NE_WIN32_EXTRAINFO *)((pModule) + 1))->pe_module : 0))
119 extern NE_MODULE
*MODULE_GetPtr( HMODULE hModule
);
120 extern void MODULE_DumpModule( HMODULE hmodule
);
121 extern void MODULE_WalkModules(void);
122 extern int MODULE_OpenFile( HMODULE hModule
);
123 extern LPSTR
MODULE_GetModuleName( HMODULE hModule
);
124 extern void MODULE_RegisterModule( NE_MODULE
*pModule
);
125 extern HINSTANCE
MODULE_GetInstance( HMODULE hModule
);
126 extern WORD
MODULE_GetOrdinal( HMODULE hModule
, const char *name
);
127 extern SEGPTR
MODULE_GetEntryPoint( HMODULE hModule
, WORD ordinal
);
128 extern BOOL
MODULE_SetEntryPoint( HMODULE hModule
, WORD ordinal
, WORD offset
);
129 extern FARPROC16
MODULE_GetWndProcEntry16( const char *name
);
132 extern BOOL
BUILTIN_Init(void);
133 extern HMODULE
BUILTIN_LoadModule( LPCSTR name
, BOOL force
);
134 extern NE_MODULE
*BUILTIN_GetEntryPoint( WORD cs
, WORD ip
,
135 WORD
*pOrd
, char **ppName
);
136 extern DWORD
BUILTIN_GetProcAddress32( NE_MODULE
*pModule
, char *function
);
137 extern BOOL
BUILTIN_ParseDLLOptions( const char *str
);
138 extern void BUILTIN_PrintDLLs(void);
141 extern BOOL
NE_LoadSegment( HMODULE hModule
, WORD segnum
);
142 extern void NE_FixupPrologs( NE_MODULE
*pModule
);
143 extern void NE_InitializeDLLs( HMODULE hModule
);
145 #endif /* _WINE_MODULE_H */