xref: /reactos/dll/win32/fusion/fusionpriv.h (revision 88179a5d)
1 /*
2  * fusion private definitions
3  *
4  * Copyright 2008 James Hawkins
5  *
6  * This library is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This library is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
19  */
20 
21 #ifndef __WINE_FUSION_PRIVATE__
22 #define __WINE_FUSION_PRIVATE__
23 
24 #include <stdarg.h>
25 
26 #include "ntstatus.h"
27 #define WIN32_NO_STATUS
28 #include "windef.h"
29 #include "windef.h"
30 #include "winbase.h"
31 #include "winuser.h"
32 #include "winver.h"
33 #include "wine/heap.h"
34 
35 #ifdef __REACTOS__
36 #include <objbase.h>
37 #include <fusion.h>
38 #endif
39 
40 #include <pshpack1.h>
41 
42 typedef struct
43 {
44     ULONG Signature;
45     USHORT MajorVersion;
46     USHORT MinorVersion;
47     ULONG Reserved;
48     ULONG VersionLength;
49     LPSTR Version;
50     BYTE Flags;
51     WORD Streams;
52 } METADATAHDR;
53 
54 typedef struct
55 {
56     DWORD Offset;
57     DWORD Size;
58 } METADATASTREAMHDR;
59 
60 typedef struct
61 {
62     DWORD Reserved1;
63     BYTE MajorVersion;
64     BYTE MinorVersion;
65     BYTE HeapOffsetSizes;
66     BYTE Reserved2;
67     LARGE_INTEGER MaskValid;
68     LARGE_INTEGER MaskSorted;
69 } METADATATABLESHDR;
70 
71 typedef struct
72 {
73     WORD Generation;
74     WORD Name;
75     WORD Mvid;
76     WORD EncId;
77     WORD EncBaseId;
78 } MODULETABLE;
79 
80 typedef struct
81 {
82     DWORD Flags;
83     WORD Name;
84     WORD Namespace;
85     WORD Extends;
86     WORD FieldList;
87     WORD MethodList;
88 } TYPEDEFTABLE;
89 
90 typedef struct
91 {
92     WORD ResolutionScope;
93     WORD Name;
94     WORD Namespace;
95 } TYPEREFTABLE;
96 
97 typedef struct
98 {
99     WORD Flags;
100     WORD Name;
101     WORD Signature;
102 } FIELDTABLE;
103 
104 typedef struct
105 {
106     DWORD HashAlgId;
107     WORD MajorVersion;
108     WORD MinorVersion;
109     WORD BuildNumber;
110     WORD RevisionNumber;
111     DWORD Flags;
112     WORD PublicKey;
113     WORD Name;
114     WORD Culture;
115 } ASSEMBLYTABLE;
116 
117 typedef struct
118 {
119     DWORD Offset;
120     DWORD Flags;
121     WORD Name;
122     WORD Implementation;
123 } MANIFESTRESTABLE;
124 
125 typedef struct
126 {
127     DWORD RVA;
128     WORD ImplFlags;
129     WORD Flags;
130     WORD Name;
131     WORD Signature;
132     WORD ParamList;
133 } METHODDEFTABLE;
134 
135 typedef struct
136 {
137     WORD Flags;
138     WORD Sequence;
139     WORD Name;
140 } PARAMTABLE;
141 
142 typedef struct
143 {
144     WORD Class;
145     WORD Interface;
146 } INTERFACEIMPLTABLE;
147 
148 typedef struct
149 {
150     WORD Class;
151     WORD Name;
152     WORD Signature;
153 } MEMBERREFTABLE;
154 
155 typedef struct
156 {
157     BYTE Type;
158     BYTE Reserved;
159     WORD Parent;
160     WORD Value;
161 } CONSTANTTABLE;
162 
163 typedef struct
164 {
165     WORD Parent;
166     WORD Type;
167     WORD Value;
168 } CUSTOMATTRIBUTETABLE;
169 
170 typedef struct
171 {
172     WORD Parent;
173     WORD NativeType;
174 } FIELDMARSHALTABLE;
175 
176 typedef struct
177 {
178     WORD Action;
179     WORD Parent;
180     WORD PermissionSet;
181 } DECLSECURITYTABLE;
182 
183 typedef struct
184 {
185     WORD PackingSize;
186     DWORD ClassSize;
187     WORD Parent;
188 } CLASSLAYOUTTABLE;
189 
190 typedef struct
191 {
192     DWORD Offset;
193     WORD Field;
194 } FIELDLAYOUTTABLE;
195 
196 typedef struct
197 {
198     WORD Signature;
199 } STANDALONESIGTABLE;
200 
201 typedef struct
202 {
203     WORD Parent;
204     WORD EventList;
205 } EVENTMAPTABLE;
206 
207 typedef struct
208 {
209     WORD EventFlags;
210     WORD Name;
211     WORD EventType;
212 } EVENTTABLE;
213 
214 typedef struct
215 {
216     WORD Parent;
217     WORD PropertyList;
218 } PROPERTYMAPTABLE;
219 
220 typedef struct
221 {
222     WORD Flags;
223     WORD Name;
224     WORD Type;
225 } PROPERTYTABLE;
226 
227 typedef struct
228 {
229     WORD Semantics;
230     WORD Method;
231     WORD Association;
232 } METHODSEMANTICSTABLE;
233 
234 typedef struct
235 {
236     WORD Class;
237     WORD MethodBody;
238     WORD MethodDeclaration;
239 } METHODIMPLTABLE;
240 
241 typedef struct
242 {
243     WORD Name;
244 } MODULEREFTABLE;
245 
246 typedef struct
247 {
248     WORD Signature;
249 } TYPESPECTABLE;
250 
251 typedef struct
252 {
253     WORD MappingFlags;
254     WORD MemberForwarded;
255     WORD ImportName;
256     WORD ImportScope;
257 } IMPLMAPTABLE;
258 
259 typedef struct
260 {
261     DWORD RVA;
262     WORD Field;
263 } FIELDRVATABLE;
264 
265 typedef struct
266 {
267     DWORD Processor;
268 } ASSEMBLYPROCESSORTABLE;
269 
270 typedef struct
271 {
272     DWORD OSPlatformID;
273     DWORD OSMajorVersion;
274     DWORD OSMinorVersion;
275 } ASSEMBLYOSTABLE;
276 
277 typedef struct
278 {
279     WORD MajorVersion;
280     WORD MinorVersion;
281     WORD BuildNumber;
282     WORD RevisionNumber;
283     DWORD Flags;
284     WORD PublickKeyOrToken;
285     WORD Name;
286     WORD Culture;
287     WORD HashValue;
288 } ASSEMBLYREFTABLE;
289 
290 typedef struct
291 {
292     DWORD Processor;
293     WORD AssemblyRef;
294 } ASSEMBLYREFPROCESSORTABLE;
295 
296 typedef struct
297 {
298     DWORD OSPlatformId;
299     DWORD OSMajorVersion;
300     DWORD OSMinorVersion;
301     WORD AssemblyRef;
302 } ASSEMBLYREFOSTABLE;
303 
304 typedef struct
305 {
306     DWORD Flags;
307     WORD Name;
308     WORD HashValue;
309 } FILETABLE;
310 
311 typedef struct
312 {
313     DWORD Flags;
314     DWORD TypeDefId;
315     WORD TypeName;
316     WORD TypeNameSpace;
317     WORD Implementation;
318 } EXPORTEDTYPETABLE;
319 
320 typedef struct
321 {
322     WORD NestedClass;
323     WORD EnclosingClass;
324 } NESTEDCLASSTABLE;
325 
326 typedef struct
327 {
328     WORD Number;
329     WORD Flags;
330 } GENERICPARAMTABLE;
331 
332 typedef struct
333 {
334     WORD MethodDef;
335     WORD Instantiation;
336 } METHODSPECTABLE;
337 
338 typedef struct
339 {
340     WORD Owner;
341     WORD Constraint;
342 } GENERICPARAMCONSTRAINTTABLE;
343 
344 typedef struct
345 {
346     DWORD ImportLookupTable;
347     DWORD DateTimeStamp;
348     DWORD ForwarderChain;
349     DWORD Name;
350     DWORD ImportAddressTable;
351     BYTE pad[20];
352 } IMPORTTABLE;
353 
354 typedef struct
355 {
356     DWORD HintNameTableRVA;
357     BYTE pad[8];
358 } IMPORTLOOKUPTABLE;
359 
360 typedef struct
361 {
362     WORD Hint;
363     BYTE Name[12];
364     BYTE Module[12];
365     DWORD Reserved;
366     WORD EntryPoint;
367     DWORD RVA;
368 } HINTNAMETABLE;
369 
370 typedef struct
371 {
372     DWORD PageRVA;
373     DWORD Size;
374     DWORD Relocation;
375 } RELOCATION;
376 
377 typedef struct
378 {
379     WORD wLength;
380     WORD wValueLength;
381     WORD wType;
382     WCHAR szKey[17];
383     VS_FIXEDFILEINFO Value;
384 } VS_VERSIONINFO;
385 
386 typedef struct
387 {
388     WORD wLength;
389     WORD wValueLength;
390     WORD wType;
391     WCHAR szKey[13];
392 } VARFILEINFO;
393 
394 typedef struct
395 {
396     WORD wLength;
397     WORD wValueLength;
398     WORD wType;
399     WCHAR szKey[13];
400     DWORD Value;
401 } VAR;
402 
403 typedef struct
404 {
405     WORD wLength;
406     WORD wValueLength;
407     WORD wType;
408     WCHAR szKey[15];
409 } STRINGFILEINFO;
410 
411 typedef struct
412 {
413     WORD wLength;
414     WORD wValueLength;
415     WORD wType;
416     WCHAR szKey[9];
417 } STRINGTABLE;
418 
419 typedef struct
420 {
421     WORD wLength;
422     WORD wValueLength;
423     WORD wType;
424 } STRINGHDR;
425 
426 typedef struct
427 {
428     DWORD Size;
429     DWORD Signature;
430     DWORD HeaderVersion;
431     DWORD SkipData;
432     BYTE Data[168];
433 } RESOURCE;
434 
435 #include <poppack.h>
436 
437 struct tagASSEMBLY;
438 typedef struct tagASSEMBLY ASSEMBLY;
439 
440 HRESULT assembly_create(ASSEMBLY **out, LPCWSTR file) DECLSPEC_HIDDEN;
441 HRESULT assembly_release(ASSEMBLY *assembly) DECLSPEC_HIDDEN;
442 HRESULT assembly_get_name(ASSEMBLY *assembly, LPWSTR *name) DECLSPEC_HIDDEN;
443 HRESULT assembly_get_path(const ASSEMBLY *assembly, LPWSTR *path) DECLSPEC_HIDDEN;
444 HRESULT assembly_get_version(ASSEMBLY *assembly, LPWSTR *version) DECLSPEC_HIDDEN;
445 PEKIND assembly_get_architecture(ASSEMBLY *assembly) DECLSPEC_HIDDEN;
446 HRESULT assembly_get_pubkey_token(ASSEMBLY *assembly, LPWSTR *token) DECLSPEC_HIDDEN;
447 HRESULT assembly_get_runtime_version(ASSEMBLY *assembly, LPSTR *version) DECLSPEC_HIDDEN;
448 HRESULT assembly_get_external_files(ASSEMBLY *assembly, LPWSTR **files, DWORD *count) DECLSPEC_HIDDEN;
449 
450 extern HRESULT IAssemblyName_SetPath(IAssemblyName *iface, LPCWSTR path) DECLSPEC_HIDDEN;
451 extern HRESULT IAssemblyName_GetPath(IAssemblyName *iface, LPWSTR buf, ULONG *len) DECLSPEC_HIDDEN;
452 
strdupW(LPCWSTR src)453 static inline LPWSTR strdupW(LPCWSTR src)
454 {
455     LPWSTR dest;
456 
457     if (!src)
458         return NULL;
459 
460     if ((dest = heap_alloc((lstrlenW(src) + 1) * sizeof(WCHAR))))
461         lstrcpyW(dest, src);
462 
463     return dest;
464 }
465 
466 #define BYTES_PER_TOKEN 8
467 #define CHARS_PER_BYTE  2
468 #define TOKEN_LENGTH    (BYTES_PER_TOKEN * CHARS_PER_BYTE + 1)
469 
token_to_str(BYTE * bytes,LPWSTR str)470 static inline void token_to_str(BYTE *bytes, LPWSTR str)
471 {
472     DWORD i;
473 
474     static const WCHAR hexval[] = {
475         '0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'
476     };
477 
478     for(i = 0; i < BYTES_PER_TOKEN; i++)
479     {
480         str[i * 2] = hexval[((bytes[i] >> 4) & 0xF)];
481         str[i * 2 + 1] = hexval[(bytes[i]) & 0x0F];
482     }
483     str[i * 2] = 0;
484 }
485 
486 #endif /* __WINE_FUSION_PRIVATE__ */
487