win32: get_path(): fix undefined behavior
[mplayer.git] / loader / wine / module.h
blob9db4c9808c38cbb2d50cb552e838f1a3ec17f37a
1 /*
2 * Module definitions
4 * Copyright 1995 Alexandre Julliard
5 */
7 #ifndef MPLAYER_MODULE_H
8 #define MPLAYER_MODULE_H
10 #include "windef.h"
11 #include "pe_image.h"
14 typedef struct {
15 BYTE type;
16 BYTE flags;
17 BYTE segnum;
18 WORD offs WINE_PACKED;
19 } ET_ENTRY;
21 typedef struct {
22 WORD first; /* ordinal */
23 WORD last; /* ordinal */
24 WORD next; /* bundle */
25 } ET_BUNDLE;
28 /* In-memory segment table */
29 typedef struct
31 WORD filepos; /* Position in file, in sectors */
32 WORD size; /* Segment size on disk */
33 WORD flags; /* Segment flags */
34 WORD minsize; /* Min. size of segment in memory */
35 HANDLE16 hSeg; /* Selector or handle (selector - 1) */
36 /* of segment in memory */
37 } SEGTABLEENTRY;
40 /* Self-loading modules contain this structure in their first segment */
42 #include "pshpack1.h"
44 typedef struct
46 WORD version; /* Must be "A0" (0x3041) */
47 WORD reserved;
48 FARPROC16 BootApp; /* startup procedure */
49 FARPROC16 LoadAppSeg; /* procedure to load a segment */
50 FARPROC16 reserved2;
51 FARPROC16 MyAlloc; /* memory allocation procedure,
52 * wine must write this field */
53 FARPROC16 EntryAddrProc;
54 FARPROC16 ExitProc; /* exit procedure */
55 WORD reserved3[4];
56 FARPROC16 SetOwner; /* Set Owner procedure, exported by wine */
57 } SELFLOADHEADER;
59 /* Parameters for LoadModule() */
60 typedef struct
62 HGLOBAL16 hEnvironment; /* Environment segment */
63 SEGPTR cmdLine WINE_PACKED; /* Command-line */
64 SEGPTR showCmd WINE_PACKED; /* Code for ShowWindow() */
65 SEGPTR reserved WINE_PACKED;
66 } LOADPARAMS16;
68 typedef struct
70 LPSTR lpEnvAddress;
71 LPSTR lpCmdLine;
72 UINT16 *lpCmdShow;
73 DWORD dwReserved;
74 } LOADPARAMS;
76 #include "poppack.h"
78 /* internal representation of 32bit modules. per process. */
79 typedef enum {
80 MODULE32_PE = 1,
81 MODULE32_ELF,
82 MODULE32_ELFDLL
83 } MODULE32_TYPE;
85 typedef struct wine_modref
87 struct wine_modref *next;
88 struct wine_modref *prev;
89 MODULE32_TYPE type;
90 union {
91 PE_MODREF pe;
92 ELF_MODREF elf;
93 } binfmt;
95 HMODULE module;
97 int nDeps;
98 struct wine_modref **deps;
100 int flags;
101 int refCount;
103 char *filename;
104 char *modname;
105 char *short_filename;
106 char *short_modname;
107 } WINE_MODREF;
109 #define WINE_MODREF_INTERNAL 0x00000001
110 #define WINE_MODREF_NO_DLL_CALLS 0x00000002
111 #define WINE_MODREF_PROCESS_ATTACHED 0x00000004
112 #define WINE_MODREF_LOAD_AS_DATAFILE 0x00000010
113 #define WINE_MODREF_DONT_RESOLVE_REFS 0x00000020
114 #define WINE_MODREF_MARKER 0x80000000
118 /* Resource types */
119 typedef struct resource_typeinfo_s NE_TYPEINFO;
120 typedef struct resource_nameinfo_s NE_NAMEINFO;
122 #define NE_SEG_TABLE(pModule) \
123 ((SEGTABLEENTRY *)((char *)(pModule) + (pModule)->seg_table))
125 #define NE_MODULE_TABLE(pModule) \
126 ((WORD *)((char *)(pModule) + (pModule)->modref_table))
128 #define NE_MODULE_NAME(pModule) \
129 (((OFSTRUCT *)((char*)(pModule) + (pModule)->fileinfo))->szPathName)
131 struct modref_list_t;
133 typedef struct modref_list_t
135 WINE_MODREF* wm;
136 struct modref_list_t *next;
137 struct modref_list_t *prev;
138 } modref_list;
141 /* module.c */
142 FARPROC MODULE_GetProcAddress( HMODULE hModule, LPCSTR function, WIN_BOOL snoop );
143 WINE_MODREF *MODULE32_LookupHMODULE( HMODULE hModule );
144 WINE_MODREF *MODULE_FindModule( LPCSTR path );
146 /* resource.c */
147 INT WINAPI AccessResource( HMODULE, HRSRC );
149 #endif /* MPLAYER_MODULE_H */