First version of DLL preloader.
[wincetools.git] / loader / himemce-map.h
1 /* himemce-map.h - High Memory for Windows CE
2    Copyright (C) 2010 g10 Code GmbH
3    Written by Marcus Brinkmann <marcus@g10code.com>
4
5    This file is part of HiMemCE.
6  
7    HiMemCE is free software; you can redistribute it and/or modify it
8    under the terms of the GNU Lesser General Public License as
9    published by the Free Software Foundation; either version 2.1 of
10    the License, or (at your option) any later version.
11    
12    HiMemCE is distributed in the hope that it will be useful, but
13    WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15    Lesser General Public License for more details.
16    
17    You should have received a copy of the GNU Lesser General Public
18    License along with this program; if not, write to the Free Software
19    Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
20    02111-1307, USA.  */
21
22 #ifndef HIMEMCE_MAP_H
23 #define HIMEMCE_MAP_H 1
24
25 #include <stddef.h>
26
27 /* The preloader makes its information available at a shared memory
28    object of this name and size.  */
29 #define HIMEMCE_MAP_NAME L"himemcemap"
30 #define HIMEMCE_MAP_SIZE (128 * 1024)
31 #define HIMEMCE_MAP_MAGIC 0x400b1337
32
33 /* The default base address.  Users should take the actual value from
34    the LOW_START member of struct himemce_map.  */
35 #define _HIMEMCE_MAP_LOW_BASE ((void *) (2 * 1024 * 1024))
36
37 /* Maximum number of DLLs that can be mapped.  */
38 #define HIMEMCE_MAP_MAX_MODULES 64
39
40
41 /* Each module provides this.  */
42 struct himemce_module
43 {
44   wchar_t *filename;
45
46   /* Points into filename.  */
47   wchar_t *dllname;
48
49   /* Export DLL name (same as DLLNAME, but in ASCII).  */
50   char *name;
51
52   /* The base address of the module image.  */
53   void *base;
54
55   /* The low (in-process) address of read-write sections is available
56      in the PointerToLinenumbers in the section header, which is
57      recycled for that purpose.  */
58 };
59
60
61 struct himemce_map
62 {
63   /* Must be HIMEMCE_MAP_MAGIC.  */
64   unsigned int magic;
65
66   /* Actual size of the map.  */
67   unsigned int size;
68
69   /* The low addresses of sections are within this range, which must
70      be reserved by the program that wants to use mapped modules as
71      soon as possible.  */
72   void *low_start;
73   int low_size;
74
75   /* Number of mapped modules.  */
76   int nr_modules;
77
78   struct himemce_module module[HIMEMCE_MAP_MAX_MODULES];
79 };
80
81
82 /* Open the map data (which must exist).  */
83 struct himemce_map *himemce_map_open (void);
84
85 /* Release the map data.  */
86 void himemce_map_close (struct himemce_map *map);
87
88 /* Find the DLL with the name DLLNAME in the map.  */
89 struct himemce_module *himemce_map_find_dll (struct himemce_map *map,
90                                              char *name);
91
92 #endif /* HIMEMCE_MAP_H */